ÌWỌNỌ̀

Itọ́sọ́nà Ìdápọ̀ Olùkàwé RFID

Ìwé àkọ́kọ́ tó péye tó ń bo àtúnṣe ibaraẹnisọrọ serial, ìtò antenna, iṣẹ́ àkọ́ọ̀lẹ̀ tag (EPC Gen2 / ISO 18000-6C), àti iṣakoso agbára. Ó ní àpẹẹrẹ fún fifi antenna ọ̀pọ̀lọpọ̀ ṣàgbékalẹ̀ àti àwárí àkójọpọ̀ tó yara.

Reader bring-up
NRN
Serial115200 8N1
ProtocolCRC16-CCITT
RF power0-33 dBm
Inventory700 tags/s
5APCWCATMIDLENDATACRC16

Àtúnṣe Ibaraẹnisọrọ Serial

Olùkàwé RFID ti ìlànà Nextwaves NRN ń bá a sọ̀rọ̀ nípasẹ̀ ibudo serial (RS-232 tàbí USB-to-Serial). Àwọn àlàyé asopọ gbọdọ̀ jẹ́ ṣètò nípò tó péye láti jẹ́ kí ìfiránṣẹ́ data dúró ṣinṣin.

Fun awọn asopọ API WebSerial ti o da lori aṣàwákiri, lo Nextwaves Reader Connect ní app.nextwaves.com/reader. Ohun elo naa ń ṣe àwárí laifọwọyi awọn ibudo COM ati ṣeto awọn paramita asopọ.

Baud rate115200
Data bits8
Stop bits1
ParityNone
TypeScript - WebSerial Connection
// 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();
Python - PySerial Connection
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()

Ilana Fireemu Ìlànà NRN ti Nextwaves

Gbogbo àṣẹ ìlànà NRN jẹ́ àkópọ̀ nínú fireemu binary tí ó ní: Header (0x5A), PCW (Protocol Control Word), Ẹ̀ka, MID (Message ID), Gigun, Data payload, àti CRC16-CCITT checksum.

AayeIwọnApejuwe
Header
1 byte
Nigbagbogbo 0x5A. ami ibẹrẹ-fọ́ọ̀mù
PCW
2 bytes
Àwọn ààmì ìlànà (ẹ̀ya, àdírẹ́sì)
Category
1 byte
Ẹ̀ka aṣẹ (0x00=Eto, 0x01=Ẹrọ, 0x02=RFID)
MID
1 byte
ID ifiranṣẹ̀ ní inú ẹ̀ka
Length
2 bytes
Gigun àkóónú ní báyìì (big-endian)
Data
N bytes
Àkópọ̀ data pàtó fún aṣẹ
CRC16
2 bytes
Checksum CRC16-CCITT ti awọn baiti lẹ́yìn akọlé

Àpẹẹrẹ Aṣẹ

QUERY_INFO - Query reader serial number and firmware
TX -> 5A 00 01 01 00 00 00 DC E5
       +----+ +------+ +----+ +----+ +------+ +------+
       | 5A | | 0001 | | 01 | | 00 | | 0000 | | DCE5 |
       +----+ +------+ +----+ +----+ +------+ +------+
        HDR     PCW    CAT   MID    LEN     CRC16
READ_EPC_TAG - Start continuous EPC tag inventory
TX -> 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)
STOP_INVENTORY - Stop running inventory scan
TX -> 5A 00 01 02 FF 00 00 88 5A
       HDR  PCW   CAT MID LEN   CRC16

Ìtọ́kasí Àṣẹ Kókó

AṣẹKooduApejuwe
QUERY_INFO
0x0100
Beere nọmba jara oluka ati awọn ẹya firmware
QUERY_RFID_ABILITY
0x1000
Beere awọn agbara RFID (ibiti agbara, nọmba antena)
READ_EPC_TAG
0x0210
Bẹrẹ iṣiro aami EPC lemọlemọ
WRITE_EPC_TAG
0x0211
Kọ data si banki EPC ti aami
STOP_INVENTORY
0x02FF
Da iṣiro aami ti n ṣiṣẹ duro
CONFIGURE_READER_POWER
0x0201
Ṣeto agbara gbigbe (0-33 dBm fun antena kọọkan)
CONFIGURE_ANTENNA_ENABLE
0x0203
Mu awọn ibudo antena ṣiṣẹ/tabi pa (bitmask)
SET_WORKING_FREQUENCY
0x0205
Ṣeto awọn igbohunsafẹfẹ iṣẹ pato
SET_FILTER_SETTINGS
0x0209
Ṣeto àlẹmọ ẹda aami (ti o da lori akoko)
BUZZER_SWITCH
0x011E
Ṣakoso ipo buzzer

Iṣeto Antenna

Awọn oluka RFID ṣe atilẹyin to 32 awọn ibudo antena. Gbogbo ibudo le jẹ mu ṣiṣẹ tabi mu pa nipasẹ bitmask ti awọn baiti 4. Awọn antena ni a n ṣeto lati 1 si 32, pẹlu baiti kọọkan ti o baamu ibudo kan.

Bitmask Antenna

Ṣeéṣiṣẹ́ àntẹna 1-40F 00 00 00Binary 00001111 - ports 1, 2, 3, 4 on
Ṣeéṣiṣẹ́ àntẹna 1 & 3 Nìkan05 00 00 00Binary 00000101 - ports 1 and 3 on
CONFIGURE_ANTENNA_ENABLE - Enable ports 1-4
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 enabled

Fifi Antenna Ọ̀pọ̀lọpọ̀ Ṣe

Nígbà tí a bá ń fi antenna ọ̀pọ̀lọpọ̀ ṣàgbékalẹ̀, ó ṣe pàtàkì láti kà sí ìtòsí (ìlà-ìtòsí vs. yíyí), ààlà àárín antenna, àti àgbègbè àbo tí ń bà a pọ̀. Olùkàwé ń ṣàwárí ní títọ́ lẹ́sẹ̀sẹ̀ nípasẹ̀ antenna tí a ti ṣí, àti ìjábọ̀ tag kọọkan ní ID antenna fún ìdánimọ̀ ipo.

Portal

Ilẹ̀kùn Dock

2-4 àntẹna fún ẹnu-ọna, ìpolárìtì yíyíká, agbára 30 dBm

Station

Bẹ́lììtì Gbigbe

1-2 àntẹna fún ọkọọkan ibudo, ìpolárìtì líníà, 20-25 dBm

Shelf

Apá Tita

Antenna pẹ̀lú pápá tó sunmọ́, agbára kékèké 15-20 dBm, àkúnya gíga

Kóòdì Tag (EPC Gen2 / ISO 18000-6C)

UHF RFID ń tẹ̀lé àdájọ EPC Gen2 (ISO 18000-6C). Gbogbo tag ní ilé-ìrántí mẹ́rin: Reserved (ọ̀rọ̀ aṣínà), EPC (àmì idanimọ 96+ bit), TID (ID chip tí kò lè yípadà), àti User (data àdáṣe).

Ilé-ìrántí Tag

BankiIDIwọn TípíkàLílo
Reserved
00
64 bits
Ọrọìgbaniwọle pa (32b) + Ọrọìgbaniwọle wọle (32b)
EPC
01
96-128 bits
SGTIN-96, SSCC-96, tàbí àkóòdù àdáṣe
TID
10
96+ bits
ID oníṣòwò chip (kà-nìkan, aláìlòpin)
User
11
0-512 bits
Data pàtó fún ohun-èlo (da lori chip)

Àpẹẹrẹ Ìtúmọ̀ SGTIN-96

SGTIN-96 ni kóòdì tó wọ́pọ̀ jùlọ fún àwọn ọja tita ati pq ipese. Yi EPC hex ti awọn ohun kikọ 24 pada si GTIN-14, nọmba jara, ati GS1 Digital Link.

SGTIN-96 Decode - Example
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
WRITE_EPC_TAG - Write EPC data to tag
// 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]

Lo irinṣẹ EPC Encoder ori ayelujara ní /tools/tds-rfid-converter lati kóòdù àti ṣíṣe àtúnkò SGTIN-96, SSCC-96, GRAI-96 taara ninu aṣàwákiri rẹ.

Iṣakoso Agbára

Agbára ìfiránṣẹ́ olùkàwé lè ṣètò láti 0 sí 33 dBm fún ọkọ̀ọ̀kan ibudo antenna. Agbára tó ga jùlọ ń pọ̀ sí i àgbègbè ìkànsí, ṣùgbọ́n ó tún ń pọ̀ sí i ìfarapa àti ìlò agbára.

CONFIGURE_READER_POWER - Set 30 dBm on all 4 ports
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 readers

Ìmúlò RSSI

Àwọn iye RSSI (Received Signal Strength Indicator) láti inú tag ni a ń ṣàfihàn gẹ́gẹ́ bí àwọ̀n ADC àìlò (0-255). Lo àtúnṣe fọ́ọ́mùlá láti rí iye dBm tó péye.

Fórúmù IyipadadBm = -100 + round((raw x 70) / 255)
Raw 128 - Dára-65 dBm
Raw 180 - Lágbára-51 dBm
Raw 220 - Pípé-40 dBm

Àyẹ̀wò Ìkójọpọ̀ Ohun-èlò Tó Yara

Fun àyẹ̀wò ìkójọpọ̀ ohun-èlò tó yara, ṣètò àwọn igbohùnsáfẹ́fẹ́ iṣẹ́, àlẹ́mọ́ àpẹẹrẹ tó jọra, àti àyípadà àyẹ̀wò aláìdákẹ́jẹ. Awọn oluka lè ṣe àtìlẹ́yìn tó 700 àmi/ìṣẹ́ju pẹ̀lú ìtò tó péye.

Ìtò Ìgbàgbọ́

UHF RFID ń ṣiṣẹ́ ní àgbègbè 920-925 MHz (Gúúsù Ìlà Oòrùn Ásíà), pẹ̀lú ààyè ikanni 0.5 MHz. Àwọn ikanni ní nǹkan 0 (920 MHz) sí 10 (925 MHz).

SET_WORKING_FREQUENCY - 6 channels (920-925 MHz)
TX -> 5A 00 01 02 05 00 06 00 02 04 06 08 0A C4 1B

Channel mapping (formula: 920.0 + index x 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 MHz

Ilana Ṣíṣe Àwárí Tó Dára Jùlọ

01

Ṣètò àwọn ibudo àntenna àti awọn ipele agbara

02

Ṣètò igbohunsafẹfẹ iṣẹ (FHSS fún àyíká tí ó kún)

03

Ṣètò àlẹ̀mọ́ àtúnṣe (500ms-3000ms gẹ́gẹ́ bí ọran ìlò ṣe yàtọ̀)

04

Firanṣẹ READ_EPC_TAG láti bẹ̀rẹ̀ àkójọ àìdáyẹ̀wò alákọ̀ọ́rẹ́

05

Ṣe àtúnṣe ìkìlọ̀ tag (PID 0x1231) bí wọ́n ṣe dé

06

Firanṣẹ STOP_INVENTORY nígbà tí o bá parí

Complete inventory flow - TypeScript
// 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");