دستاویزی دستاویز
RFID ریڈر انٹیگریشن مینوئل
سیریل کمیونیکیشن سیٹ اپ، اینٹینا کنفیگریشن، ٹیگ انکوڈنگ آپریشنز (EPC Gen2 / ISO 18000-6C)، اور پاور مینجمنٹ کا احاطہ کرنے والی جامع دستاویزات۔ ملٹی اینٹینا تعیناتیوں اور تیز رفتار انوینٹری اسکیننگ کے لیے مثالیں شامل ہیں۔
سیریل کمیونیکیشن سیٹ اپ
Nextwaves NRN پروٹوکول RFID ریڈرز سیریل پورٹ (RS-232 یا USB-to-Serial) کے ذریعے مواصلت کرتے ہیں۔ مستحکم ڈیٹا ٹرانسمیشن کو یقینی بنانے کے لیے کنکشن پیرامیٹرز کو صحیح طریقے سے کنفیگر کرنا ضروری ہے۔
Baud Rate
115200
Data Bits
8
Stop Bits
1
Parity
None
براؤزر پر مبنی WebSerial API کنکشن کے لیے، app.nextwaves.com/reader پر Nextwaves Reader Connect استعمال کریں۔ ایپلیکیشن COM پورٹس کو خود بخود پتہ لگاتی ہے اور کنکشن پیرامیٹرز کو کنفیگر کرتی ہے۔
// 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 پروٹوکول فریم ڈھانچہ
ہر NRN پروٹوکول کمانڈ ایک بائنری فریم میں شامل ہے جس میں شامل ہیں: ہیڈر (0x5A)، PCW (پروٹوکول کنٹرول ورڈ)، زمرہ، MID (میسج ID)، لمبائی، ڈیٹا پے لوڈ، اور CRC16-CCITT چیکسم۔
| فیلڈ | سائز | تفصیل |
|---|---|---|
| Header | 1 byte | ہمیشہ 0x5A۔ فریم مارکر کا آغاز |
| PCW | 2 bytes | پروٹوکول جھنڈے (ورژن، پتہ) |
| Category | 1 byte | کمانڈ کی قسم (0x00=System, 0x01=Device, 0x02=RFID) |
| MID | 1 byte | زمرے کے اندر پیغام ID |
| Length | 2 bytes | بائٹس میں پے لوڈ کی لمبائی (بڑے-اینڈین) |
| Data | N bytes | کمانڈ سے مخصوص پے لوڈ |
| CRC16 | 2 bytes | ہیڈر کے بعد بائٹس کا CRC16-CCITT چیکسم |
کمانڈ کی مثالیں
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کلیدی کمانڈز حوالہ
| کمانڈ | کوڈ | تفصیل |
|---|---|---|
| QUERY_INFO | 0x0100 | ریڈر سیریل نمبر اور فرم ویئر ورژن کو استفسار کریں |
| QUERY_RFID_ABILITY | 0x1000 | RFID صلاحیتوں کو استفسار کریں (پاور رینج، اینٹینا کی گنتی) |
| READ_EPC_TAG | 0x0210 | مسلسل EPC ٹیگ انوینٹری شروع کریں |
| WRITE_EPC_TAG | 0x0211 | ٹیگ کے EPC بینک میں ڈیٹا لکھیں |
| STOP_INVENTORY | 0x02FF | چلتی ہوئی ٹیگ انوینٹری کو روکیں |
| CONFIGURE_READER_POWER | 0x0201 | ٹرانسمٹ پاور سیٹ کریں (0-33 dBm فی اینٹینا) |
| CONFIGURE_ANTENNA_ENABLE | 0x0203 | اینٹینا پورٹس کو فعال/غیر فعال کریں (بٹ ماسک) |
| SET_WORKING_FREQUENCY | 0x0205 | مخصوص کام کرنے کی فریکوئنسی سیٹ کریں |
| SET_FILTER_SETTINGS | 0x0209 | ٹیگ ڈپلیکیٹ فلٹر کو ترتیب دیں (وقت پر مبنی) |
| BUZZER_SWITCH | 0x011E | بزر موڈ کو کنٹرول کریں |
اینٹینا کنفیگریشن
RFID ریڈرز 32 اینٹینا پورٹس تک سپورٹ کرتے ہیں۔ ہر پورٹ کو 4-بائٹ بٹ ماسک کے ذریعے فعال یا غیر فعال کیا جاتا ہے۔ اینٹینا کو 1 سے 32 تک نمبر دیا جاتا ہے، ہر بٹ ایک پورٹ کے مساوی ہے۔
اینٹینا بٹ ماسک
اینٹینا 1-4 فعال کریں
0x0F, 0x00, 0x00, 0x00
Binary: 00001111 → Ports 1,2,3,4 ON
صرف اینٹینا 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 enabledملٹی-اینٹینا تعیناتی
متعدد اینٹینا کی تعیناتی کرتے وقت، پولرائزیشن (لکیری بمقابلہ سرکلر)، اینٹینا کے درمیان فاصلہ، اور اوورلیپنگ کوریج زونز پر غور کریں۔ ریڈر فعال اینٹینا کے ذریعے یکے بعد دیگرے اسکین کرتا ہے، اور ہر ٹیگ رپورٹ میں پوزیشن کے تعین کے لیے اینٹینا ID شامل ہوتا ہے۔
ڈاک ڈور
پورٹل کے فی 2-4 اینٹینا، سرکلر پولرائزیشن، 30 dBm پاور
کنویئر بیلٹ
اسٹیشن کے فی 1-2 اینٹینا، لکیری پولرائزیشن، 20-25 dBm
ریٹیل شیلف
قریب فیلڈ اینٹینا، کم پاور 15-20 dBm، اعلی کثافت
ٹیگ انکوڈنگ (EPC Gen2 / ISO 18000-6C)
UHF RFID EPC Gen2 معیار (ISO 18000-6C) کی پیروی کرتا ہے۔ ہر ٹیگ میں 4 میموری بینک ہوتے ہیں: محفوظ (پاس ورڈ)، EPC (96+ بٹ شناخت کنندہ)، TID (غیر تبدیل شدہ چپ ID)، اور صارف (کسٹم ڈیٹا)۔
ٹیگ میموری ڈھانچہ
| بینک | شناخت | عام سائز | استعمال |
|---|---|---|---|
| Reserved | 00 | 64 bits | کل پاس ورڈ (32b) + رسائی پاس ورڈ (32b) |
| EPC | 01 | 96-128 bits | SGTIN-96, SSCC-96, یا حسب ضرورت انکوڈنگ |
| TID | 10 | 96+ bits | چپ بنانے والے کی ID (صرف پڑھنے کے لیے، منفرد) |
| User | 11 | 0-512 bits | ایپلیکیشن کے لیے مخصوص ڈیٹا (چپ پر منحصر) |
SGTIN-96 ڈی کوڈنگ کی مثال
SGTIN-96 خوردہ فروشی اور سپلائی چین کی مصنوعات کے لیے سب سے عام انکوڈنگ ہے۔ 24 حروف والے ہیکس EPC کو GTIN-14، سیریل نمبر، اور GS1 ڈیجیٹل لنک میں تبدیل کریں۔
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]آن لائن EPC اینکوڈر ٹول استعمال کریں /tools/tds-rfid-converter SGTIN-96, SSCC-96, GRAI-96 کو براہ راست اپنے براؤزر میں انکوڈ اور ڈی کوڈ کرنے کے لیے۔
پاور مینجمنٹ
ریڈر ٹرانسمٹ پاور اینٹینا پورٹ کے لحاظ سے 0 سے 33 dBm تک ایڈجسٹ کی جا سکتی ہے۔ زیادہ پاور ریڈ رینج کو بڑھاتی ہے لیکن مداخلت اور بجلی کی کھپت میں بھی اضافہ کرتی ہے۔
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 مانیٹرنگ
ٹیگز سے RSSI (وصول شدہ سگنل کی طاقت کا اشارے) کی قدریں خام ADC بائٹس (0-255) کے طور پر رپورٹ کی جاتی ہیں۔ درست dBm قدریں حاصل کرنے کے لیے تبادلوں کے فارمولے کا استعمال کریں۔
تبدیلی کا فارمولا
dBm = -100 + round((raw × 70) / 255)
Raw 128
-65 dBm
اچھا
Raw 180
-51 dBm
مضبوط
Raw 220
-40 dBm
شاندار
تیز رفتار انوینٹری اسکیننگ
تیز رفتار انوینٹری اسکیننگ کے لیے، کام کرنے والی فریکوئنسیوں، ڈپلیکیٹ ٹیگ فلٹر، اور مسلسل اسکین موڈ کو کنفیگر کریں۔ ریڈرز بہترین کنفیگریشن کے ساتھ 700 ٹیگز/سیکنڈ تک سپورٹ کرتے ہیں۔
فریکوئنسی کنفیگریشن
UHF RFID 920-925 MHz بینڈ (جنوب مشرقی ایشیا) میں کام کرتا ہے، جس میں 0.5 MHz چینل کی جگہ ہے۔ چینلز کو 0 (920 MHz) سے 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 MHzبہترین اسکیننگ ورک فلو
اینٹینا پورٹس اور پاور لیول کو ترتیب دیں
ورکنگ فریکوئنسیز سیٹ کریں (گھنے ماحول کے لیے FHSS)
ڈپلیکیٹ فلٹر ترتیب دیں (استعمال کے کیس پر منحصر ہے 500ms-3000ms)
مسلسل انوینٹری شروع کرنے کے لیے READ_EPC_TAG بھیجیں
ٹیگ اطلاعات پر کارروائی کریں (PID 0x1231) جیسے ہی وہ پہنچتے ہیں
ہو جانے پر STOP_INVENTORY بھیجیں
// 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");