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.
À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ọ.
// 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()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.
Àpẹẹrẹ Aṣẹ
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 CRC16Ìtọ́kasí Àṣẹ Kókó
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
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 enabledFifi 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.
Ilẹ̀kùn Dock
2-4 àntẹna fún ẹnu-ọna, ìpolárìtì yíyíká, agbára 30 dBm
Bẹ́lììtì Gbigbe
1-2 àntẹna fún ọkọọkan ibudo, ìpolárìtì líníà, 20-25 dBm
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
À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.
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]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.
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.
À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).
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 MHzIlana Ṣíṣe Àwárí Tó Dára Jùlọ
Ṣètò àwọn ibudo àntenna àti awọn ipele agbara
Ṣètò igbohunsafẹfẹ iṣẹ (FHSS fún àyíká tí ó kún)
Ṣètò àlẹ̀mọ́ àtúnṣe (500ms-3000ms gẹ́gẹ́ bí ọran ìlò ṣe yàtọ̀)
Firanṣẹ READ_EPC_TAG láti bẹ̀rẹ̀ àkójọ àìdáyẹ̀wò alákọ̀ọ́rẹ́
Ṣe àtúnṣe ìkìlọ̀ tag (PID 0x1231) bí wọ́n ṣe dé
Firanṣẹ STOP_INVENTORY nígbà tí o bá parí
// 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");