DOKUMENTAATIO
RFID-lukijan integrointiopas
Kattava dokumentaatio, joka kattaa sarjaliikenteen asetukset, antennin konfiguroinnin, tagien koodausoperaatiot (EPC Gen2 / ISO 18000-6C) ja virranhallinnan. Sisältää esimerkkejä useiden antennien käyttöönotoista ja nopeasta inventaarion skannauksesta.
Sarjaliikenteen asetukset
Nextwaves NRN -protokollan RFID-lukijat kommunikoivat sarjaportin (RS-232 tai USB-to-Serial) kautta. Yhteysparametrit on määritettävä oikein vakaan tiedonsiirron varmistamiseksi.
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
Käytä selainpohjaisia WebSerial API -yhteyksiä varten Nextwaves Reader Connect -ohjelmaa osoitteessa app.nextwaves.com/reader. Sovellus tunnistaa COM-portit automaattisesti ja määrittää yhteysparametrit.
// 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 -protokollan kehysrakenne
Jokainen NRN-protokollakomento on kapseloitu binäärikehykseen, joka koostuu: Otsikosta (0x5A), PCW:stä (Protocol Control Word), kategoriasta, MID:stä (Message ID), pituudesta, Data payloadista ja CRC16-CCITT-tarkistussummasta.
| Kenttä | Koko | Kuvaus |
|---|---|---|
| Header | 1 byte | Aina 0x5A. kehyksen aloitusmerkki |
| PCW | 2 bytes | Protokollan liput (versio, osoite) |
| Category | 1 byte | Komennon luokka (0x00=Järjestelmä, 0x01=Laite, 0x02=RFID) |
| MID | 1 byte | Viestin tunnus kategoriassa |
| Length | 2 bytes | Hyötykuorman pituus tavuina (big-endian) |
| Data | N bytes | Komennon mukainen hyötykuorma |
| CRC16 | 2 bytes | CRC16-CCITT-tarkistussumma tavuista otsikon jälkeen |
Esimerkkikomennot
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 CRC16Avainkomentojen viite
| Komento | Koodi | Kuvaus |
|---|---|---|
| QUERY_INFO | 0x0100 | Kysy lukijan sarjanumero ja laiteohjelmistoversiot |
| QUERY_RFID_ABILITY | 0x1000 | Kysy RFID-ominaisuudet (tehoalue, antennien määrä) |
| READ_EPC_TAG | 0x0210 | Aloita jatkuva EPC-tunnisteiden inventointi |
| WRITE_EPC_TAG | 0x0211 | Kirjoita dataa tagin EPC-pankkiin |
| STOP_INVENTORY | 0x02FF | Pysäytä käynnissä oleva tunnisteinventointi |
| CONFIGURE_READER_POWER | 0x0201 | Aseta lähetysteho (0–33 dBm per antenni) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | Ota antenniportit käyttöön/poista käytöstä (bittimaski) |
| SET_WORKING_FREQUENCY | 0x0205 | Aseta tietyt toimintataajuudet |
| SET_FILTER_SETTINGS | 0x0209 | Määritä tunnisteiden duplikaattisuodatin (aikaan perustuva) |
| BUZZER_SWITCH | 0x011E | Ohjaa summerin tilaa |
Antennin konfigurointi
RFID-lukijat tukevat jopa 32 antenniporttia. Jokainen portti otetaan käyttöön tai poistetaan käytöstä 4-tavuisella bittimaskilla. Antennit on numeroitu 1–32, ja jokainen bitti vastaa yhtä porttia.
Antennin bittimaski
Ota käyttöön antennit 1-4
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
Ota käyttöön vain antennit 1 ja 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 enabledUsean antennin käyttöönotto
Kun otat käyttöön useita antenneja, harkitse polarisaatiota (lineaarinen vs. ympyrä), antennien välistä etäisyyttä ja päällekkäisiä peittoalueita. Lukija skannaa peräkkäin käytössä olevien antennien läpi, ja jokainen tagiraportti sisältää antennin ID:n sijainnin määrittämistä varten.
Lastauslaituri
2-4 antennia per portti, ympyräpolarisaatio, 30 dBm teho
Kuljetinhihna
1-2 antennia per asema, lineaarinen polarisaatio, 20-25 dBm
Vähittäismyyntihylly
Lähikenttäantennit, pienitehoiset 15–20 dBm, suuri tiheys
Tunnisteen koodaus (EPC Gen2 / ISO 18000-6C)
UHF RFID noudattaa EPC Gen2 -standardia (ISO 18000-6C). Jokaisessa tunnisteessa on 4 muistipankkia: Reserved (salasanat), EPC (96+ bitin tunniste), TID (muuttumaton sirun ID) ja User (mukautetut tiedot).
Tunnisteen muistirakenne
| Pankki | Tunnus | Tyypillinen koko | Käyttö |
|---|---|---|---|
| Reserved | 00 | 64 bits | Kill-salasana (32b) + Access-salasana (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96 tai mukautettu koodaus |
| TID | 10 | 96+ bits | Siruvalmistajan tunnus (vain luku, yksilöllinen) |
| User | 11 | 0-512 bits | Sovelluskohtaiset tiedot (sirusta riippuen) |
SGTIN-96 Dekoodauksen esimerkki
SGTIN-96 on yleisin koodaus vähittäiskaupan ja toimitusketjun tuotteille. Muunna 24 merkin heksadesimaalinen EPC GTIN-14:ksi, sarjanumeroksi ja GS1 Digital Link -linkiksi.
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]Käytä online EPC Encoder -työkalua osoitteessa /tools/tds-rfid-converter koodataksesi ja dekoodataksesi SGTIN-96, SSCC-96, GRAI-96 suoraan selaimessasi.
Virranhallinta
Lukijan lähetystehoa voidaan säätää 0–33 dBm antenniporttia kohti. Suurempi teho lisää lukuetäisyyttä, mutta lisää myös häiriöitä ja virrankulutusta.
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-valvonta
Tagien RSSI (Received Signal Strength Indicator) -arvot raportoidaan raakana ADC-tavuina (0-255). Käytä muuntokaavaa saadaksesi tarkat dBm-arvot.
Muuntokaava
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
Hyvä
Raw 180
-51 dBm
Vahva
Raw 220
-40 dBm
Erinomainen
Nopea inventaarioluku
Nopeaa inventaariolukua varten määritä toimintataajuudet, kaksoistunnisteiden suodatus ja jatkuva skannaustila. Lukijat tukevat jopa 700 tunnusta/sekunti optimaalisella konfiguraatiolla.
Taajuuskonfiguraatio
UHF RFID toimii 920-925 MHz:n taajuusalueella (Kaakkois-Aasia), 0,5 MHz:n kanavavälillä. Kanavat on numeroitu 0:sta (920 MHz) 10:een (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 MHzOptimaalinen skannausprosessin kulku
Määritä antenniportit ja tehotasot
Aseta toimintataajuudet (FHSS tiheisiin ympäristöihin)
Määritä kaksoiskappalesuodatin (500ms-3000ms käyttötapauksesta riippuen)
Lähetä READ_EPC_TAG aloittaaksesi jatkuvan inventoinnin
Käsittele tunnisteilmoitukset (PID 0x1231) niiden saapuessa
Lähetä STOP_INVENTORY, kun olet valmis
// 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");