Index: ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js =================================================================== diff -u -r35330 -r35347 --- ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 35330) +++ ssts-web/src/main/webapp/disinfectsystem/packing/setPlugInRFID.js (.../setPlugInRFID.js) (revision 35347) @@ -10,6 +10,7 @@ var msg5 = '端口已打开!'; var msg6 = '数据写入成功!'; var msg7 = '数据写入失败,请重新写入!'; +var newRssiValue = -100; //hex转字符串 function hextoString(hex) { @@ -36,6 +37,36 @@ return arr } +function hex_to_bin(str) { + let hex_array = [{ key: 0, val: "0000" }, { key: 1, val: "0001" }, { key: 2, val: "0010" }, { key: 3, val: "0011" }, { key: 4, val: "0100" }, { key: 5, val: "0101" }, { key: 6, val: "0110" }, { key: 7, val: "0111" }, + { key: 8, val: "1000" }, { key: 9, val: "1001" }, { key: 'a', val: "1010" }, { key: 'b', val: "1011" }, { key: 'c', val: "1100" }, { key: 'd', val: "1101" }, { key: 'e', val: "1110" }, { key: 'f', val: "1111" }] + + let value = "" + for (let i = 0; i < str.length; i++) { + for (let j = 0; j < hex_array.length; j++) { + if (str.charAt(i).toLowerCase() == hex_array[j].key) { + value = value.concat(hex_array[j].val) + break + } + } + } + return value +} + +//RSSI计算规则 +function str16ToRSSI(str) { + var str2 = hex_to_bin(str); + if (str2.charAt(0) == 1 || str2.charAt(0) == '1') { + str2 = str2 - 1 + } + var newStr = ''; + for (var i = 0; i < str2.toString().length; i++) { + newStr += (Math.abs(str2.toString()[i] - 1).toString()); + } + var rssi = parseInt(newStr, 2) / 10; + return -rssi; +} + //打开串口并连接 async function openPort(params, callback) { try { @@ -151,11 +182,13 @@ writer = port.writable.getWriter(); //设置循环查询获取用户区的数据 if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H - var data = new Uint8Array([187, 23, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 41, 13, 10]); - await writer.write(data); + // var data = [187, 23, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 40, 13, 10]; + var data = [187, 23, 2, 0, 0, 25, 13, 10]; + var startData = new Uint8Array(data); + await writer.write(startData); } else if (usbVendorId == 4292 && usbProductId == 60000) {//手提式 A100 var encoder = new TextEncoder(); - var data = encoder.encode(">x m 1 03 00 09\r\n"); + var data = encoder.encode(">Af\r\n"); await writer.write(data); } else { callback(msg1, false, 'msg1'); @@ -172,6 +205,9 @@ break; } if (value) { + if (sessionStorage.getItem('rssiValue')) { + newRssiValue = 0 - sessionStorage.getItem('rssiValue'); + } var dataString = ""; if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H if (value.length > 20) { @@ -217,29 +253,28 @@ dataString = dataString.toUpperCase(); if (getAllData) { var newTid; - if (dataString.indexOf('BB') >= 0) { - var tid = dataString.substring(36, 60); - if (tid.length == 24 && tid.indexOf('E') == 0) { - newTid = tid || '' + var rssiValue = 0; + if (dataString.indexOf('BB') >= 0 && dataString.length == 64) { + var tid = dataString.substring(34, 58); + var epc = dataString.substring(10, 34); + var rssi = dataString.substring(58, 62); + var newData = hextoString(epc); + var rssiValue = str16ToRSSI(rssi); + newTid = tid + ',' + newData; + if (rssiValue < -20 && rssiValue > -100 && rssiValue > newRssiValue) { + callback(newTid, true); } } - if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { - var newData = hextoString(dataString); - if (newData.indexOf("M") == 0) { - newData = newData.substring(newData.indexOf("M"), newData.indexOf("FF") + 2); - newTid += ',' + newData; - } - } - if (newTid) { - callback(newTid, true); - } } else { - if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { - var newData = hextoString(dataString); - if (newData.indexOf("M") == 0) { - newData = newData.substring(newData.indexOf("M") + 1, newData.indexOf("FF")); - if (barcode !== newData) { - barcode = newData; + if (dataString.indexOf('BB') >= 0 && dataString.length == 64) { + var tid = dataString.substring(34, 58); + var epc = dataString.substring(10, 34); + var rssi = dataString.substring(58, 62); + var newData = hextoString(epc); + var rssiValue = str16ToRSSI(rssi); + if (barcode !== newData) { + barcode = newData; + if (rssiValue < 0 && rssiValue > -100 && rssiValue > newRssiValue) { callback(barcode, true); } } @@ -263,23 +298,21 @@ barcode = '' } } - if (dataString !== '' && dataString.indexOf('M') > 0) { - if (getAllData) { - var arr = dataString.split('M'); - var uid = arr[0].split('R')[1]; - var userId = arr[1]; - userId = hextoString(userId); - if (uid) { - callback(uid + ',' + userId, true); - } - } else { - var newData = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('4646')); + if (dataString !== '' && dataString.indexOf('46') > 0) { + var newData = ''; + if (dataString.indexOf('T') == 0) { + newData = dataString.substring(dataString.indexOf('T') + 1, dataString.indexOf('46')); newData = hextoString(newData); - if (newData.indexOf("M") == 0) { - if (barcode !== newData) { - barcode = newData.substring(1, newData.length); - callback(barcode, true); - } + } else if (dataString.indexOf('>T') == 0) { + newData = dataString.substring(dataString.indexOf('>T') + 1, dataString.indexOf('46')); + newData = hextoString(newData); + } + var rssi = dataString.substring(dataString.length - 2, dataString.length); + var rssiValue = parseInt(rssi, 16) - 130; + if (rssiValue < 0 && rssiValue > -100 && rssiValue > newRssiValue) { + if (barcode !== newData) { + barcode = newData; + callback(barcode, true); } } } @@ -336,32 +369,27 @@ if (dataString !== '') { dataString = dataString.toUpperCase(); if (getAllData) { - var newTid; - if (dataString.indexOf('BB') >= 0) { - var tid; - if (dataString.indexOf('4D') > 0) { - tid = dataString.substring(30, dataString.indexOf('4D') - 2); - } else { - tid = dataString.substring(30, dataString.length - 2); + if (dataString.indexOf('BB') >= 0 && dataString.length == 64) { + var tid = dataString.substring(34, 58); + var epc = dataString.substring(10, 34); + var rssi = dataString.substring(58, 62); + var newData = hextoString(epc); + var rssiValue = str16ToRSSI(rssi); + newTid = tid + ',' + newData; + if (rssiValue < 0 && rssiValue > -100 && rssiValue > newRssiValue) { + callback(newTid, true); } - if (tid.length > 10 && tid.indexOf('E') == 0) { - newTid = tid || '' - } } - if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { - var newData = hextoString(dataString); - if (newData.indexOf("M") == 0) { - newData = newData.substring(newData.indexOf("M"), newData.indexOf("FF") + 2); - callback(newTid + ',' + newData, true); - } - } } else { - if (dataString.indexOf('4D') > -1 && dataString.indexOf('4646') > -1) { - var newData = hextoString(dataString); - if (newData.indexOf("M") == 0) { - newData = newData.substring(newData.indexOf("M") + 1, newData.indexOf("FF")); - if (barcode !== newData) { - barcode = newData; + if (dataString.indexOf('BB') >= 0 && dataString.length == 64) { + var tid = dataString.substring(34, 58); + var epc = dataString.substring(10, 34); + var rssi = dataString.substring(58, 62); + var newData = hextoString(epc); + var rssiValue = str16ToRSSI(rssi); + if (barcode !== newData) { + barcode = newData; + if (rssiValue < 0 && rssiValue > -100 && rssiValue > newRssiValue) { callback(barcode, true); } } @@ -385,12 +413,20 @@ barcode = '' } } - if (dataString !== '' && dataString.indexOf('M') > 0) { - var newData = dataString.substring(dataString.indexOf('M') + 1, dataString.indexOf('4646')); - newData = hextoString(newData); - if (newData.indexOf("M") == 0) { + if (dataString !== '' && dataString.indexOf('46') > 0) { + var newData = ''; + if (dataString.indexOf('T') == 0) { + newData = dataString.substring(dataString.indexOf('T') + 1, dataString.indexOf('46')); + newData = hextoString(newData); + } else if (dataString.indexOf('>T') == 0) { + newData = dataString.substring(dataString.indexOf('>T') + 1, dataString.indexOf('46')); + newData = hextoString(newData); + } + var rssi = dataString.substring(dataString.length - 2, dataString.length); + var rssiValue = parseInt(rssi, 16) - 130; + if (rssiValue < 0 && rssiValue > -100 && rssiValue > newRssiValue) { if (barcode !== newData) { - barcode = newData.substring(1, newData.length); + barcode = newData; callback(barcode, true); } } @@ -423,7 +459,7 @@ async function startRFID() { var { usbProductId, usbVendorId } = port.getInfo(); if (usbVendorId == 6790 && usbProductId == 29987 && isStop == true) {//桌面式 F5005-H - var data = [187, 23, 9, 0, 0, 0, 0, 0, 0, 0, 0, 8, 40, 13, 10]; + var data = [187, 23, 2, 0, 0, 25, 13, 10]; var startData = new Uint8Array(data); await writer.write(startData); isStop = false; @@ -460,23 +496,14 @@ } var { usbProductId, usbVendorId } = port.getInfo(); if (usbVendorId == 6790 && usbProductId == 29987) {//桌面式 F5005-H - var barcodeArr = stringtoArr(barcode); - var addArr = []; - if (barcodeArr.length < 18) { - for (var j = 0; j < 18 - barcodeArr.length; j++) { - addArr.push(0); - } - } - // var arr = [187]; - // var arr1 = [26, 42, 0, 0, 0, 0, 1, 0, 12]; - // var arr3 = [3, 0, 0, 0, 9]; + var barcodeArr = stringtoArr(barcode + 'F'); var arr = [187]; - var arr1 = [26, 28, 0, 0, 0, 0, 0, 0, 0]; - var arr3 = [3, 0, 0, 0, 8]; + var arr1 = [26, 24, 0, 0, 0, 0, 0, 0, 0]; + var arr3 = [1, 0, 2, 0, 6]; var resultArr = arr1.concat(arr3).concat(barcodeArr) - if (barcodeArr.length < 16) { - for (var k = 0; k < 16 - barcodeArr.length; k++) { + if (barcodeArr.length < 12) { + for (var k = 0; k < 12 - barcodeArr.length; k++) { resultArr.push(0) } }