لماذا؟
يتيح لك قارئ UHF توفير التحكم في العلامات على مسافة 10 أمتار ، مما يعطي احتمالات مثيرة للاهتمام لاستخدامات مختلفة. الأكثر وضوحا هو السيطرة على مرور المركبات. ولكن يمكنك التوصل إلى المزيد من الخيارات الغريبة: التحكم في المعدات في المرآب / الحظيرة. من الصعب على اللص أن يعتقد أن علامة RFID ملتصقة بدراجة (حقيبة أداة) وأنه قادر على الإبلاغ عن رحيله خارج المحيط المرصود.
NodeJS + RaspberryPI هو خادم مرن ورخيص لمعالجة البيانات وإدارة الأجهزة الطرفية.
المعدات
أخذت للاختبارات CF-RU5109 (CHAFON) ، والتي تدعم اتصال RS232 ، RS485 ، Wiegand ، TCP.
(أحتاج TCP فقط لراحة معدات الاختبار)
صفحة الطراز -
CF-RU5109العلامات - rfid gen2 uhf paper tag مع شريحة Alien H3
نطاق القراءة. أظهرت التجارب أن القراءة تعتمد على نشاط الملصق (حركته في الفضاء). تتم قراءة علامة الاستلقاء السلبية بثقة على مسافة 3 أمتار ، تتحرك بشكل ضعيف - 5-5.5 متر ، على مسافة 8 أمتار اضطررت إلى التلويح بيدي. القارئ لديه هوائي مدمج 9dbi.


البرمجيات
يأتي القارئ مع SDK ووصف مفصل للأوامر والعديد من برامج الاختبار لـ Windows. أستخدم هذا البرنامج فقط لمحاولة العمل مع القارئ - لسنا بحاجة إلى أي شيء من العمل مع NodeJS.
الاتصال بالعقدة
tcpclient.prototype.Start = function () { client = new net.Socket(); client.setEncoding('ascii'); client.connect(6000, '192.168.0.190', function() { }); client.on('connect', function(data) { console.log('UHF reader connected'); var bytes = Buffer.from([0x04, 0xff, 0x21, 0x19, 0x95], "ascii"); client.write(bytes); client.on('data', function(data) { console.log('UHF reader respond:'); var buffer = Buffer.from(data, "ascii"); console.log(buffer); }); }); client.on('close', function() { console.log('UHF reader - connection closed'); }); client.on('error', function(err) { console.log(err) }); }; tcpclient.prototype.Write = function (req) { var bytes = new Buffer(req, "ascii"); console.log(bytes); client.write(bytes); };
من الدليل. تم بناء كتلة الأوامر على النحو التالي:
Len، Adr، Cmd، Data []، LSB-CRC16، MSB-CRC16
البايتان الأخيران هما المجموع الاختباري CRC16 ، مع كثير الحدود 0x8408 ، رقم البداية 0xFFFF. يتم عرض وحدات البايت بترتيب عكسي. يرجى من الشركة المصنعة توفير رمز C للحساب ، وأعيد كتابته في JS (انظر أدناه).
وفقًا لذلك ، [0x04 ، 0xff ، 0x21 ، 0x19 ، 0x95] هو أمر يطلب حالة القارئ على العنوان الافتراضي FF. 04 طولًا ، 21 أمرًا ، 19 و 95 - المجموع الاختباري CRC16.
var PRESET_VALUE = 0xFFFF; var POLYNOMIAL = 0x8408; var CRC16 = function (pucY) { var uiCrcValue = PRESET_VALUE; for(var i = 0; i < pucY.length; i++){ uiCrcValue = uiCrcValue ^ (pucY[i]); for(var j = 0; j < 8; j++){ if(uiCrcValue & 0x0001){ uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL; } else { uiCrcValue = (uiCrcValue >> 1); } } } var buf = Buffer.from(uiCrcValue.toString(16), 'hex'); buf = Buffer.from([buf[1], buf[0]], 'hex'); return buf; };
أمثلة على الأوامر
الجرد - طلب لقراءة بطاقة واحدة. يعمل في وضع الإجابة
req =[0x04, 0x00, 0x01, 0xdb, 0x4b]; tcpClient.Write(req);
إذا كانت العلامة في الأفق ، نحصل على الجواب
رد قارئ UHF:
<المخزن المؤقت 13 00 01 01 01 0c 62 00 51 79 17 19 00 04 05 60 5b 28 2f 24>
62 00 51 79 17 19 00 04 05 60 5b 28 هي العلامة.
تبديل أوضاع تشغيل القارئ
وضع الإجابة : [0x0a ، 0x00 ، 0x35 ، 0x00 ، 0x02 ، 0x01 ، 0x00 ، 0x01 ، 0x00 ، 0x2a ، 0x9f]
وضع المسح / نشط : [0x0a ، 0x00 ، 0x35 ، 0x01 ، 0x02 ، 0x01 ، 0x00 ، 0x01 ، 0x00 ، 0x01 ، 0x9b]. في هذا الوضع ، يقوم القارئ باستمرار باستقصاء العلامات وإعطائها علامات.
ما هي الخطوة التالية؟
وبعد ذلك ، إذا كان هناك حل بسيط مطلوب ، فإننا إما نكتب كودًا يرسل الأمر 0x01 (الجرد) بشكل دوري. تعطي التسميات في منطقة الرؤية علاماتها ، ونتحقق منها باستخدام قاعدة البيانات ونبدأ الإجراءات المناسبة. أو نكتب رمزًا ، في وضع المسح المستمر ، ينتظر أن تقع العلامة في نطاق الرؤية ويستجيب بحدث.