google浏览器下开发UHF超高频读写器

在google浏览器下采用js脚本开发UHF超高频读写器, API接口有如下所示:

.1、UHF读卡器寻卡,符合18000-6C,G2的卡和标签

G2_Inventory(isEPC)

G2_Inventory方法通过超高频读卡器YW-602U来寻卡,目前只支持单张卡片。
参数:isEPC:是否读取EPC,isEPC=0,返回卡片的EPC。isEPC=1返回卡片的TID

回调函数返回结果:

FunctionID=23,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:根据参数返回的EPC或者TID
strData:与CardNo相同
ValData:无

3.2、读取UHF标签的内存区域

G2_Read(memType,StartPos, ReadLength,FormatID)

G2_Read方法读取UHF标签的内存。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数:memType:内存区域,0保留区,1EPC区,2TID区,3用户区
StartPos: 内存起始地址.(必须为偶数)
ReadLength:要读取的字节长度.(必须为偶数)
FormatID: 数据返回的格式,0为16进制字符串,1为普通字符串.

回调函数返回结果:

FunctionID=24,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:根据参数FormatID返回的16进制字符串或者普通字符串.
ValData:无

3.3、写UHF标签的内存区域

G2_Write(memType,StartPos,FormatID, Data)

G2_Write方法写入UHF标签的内存。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数:memType:内存区域,0保留区,1EPC区,2TID区,3用户区
StartPos: 内存起始地址.(必须为偶数)
FormatID: 数据Data的格式,0为16进制字符串,1为普通字符串.
Data: 与formatID格式对应的字符串, 如果不够偶数字节,将后面自动补0x00.

回调函数返回结果:

FunctionID=25,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:实际写入的16进制字符串
ValData:无

3.4、改写UHF标签EPC

G2_WriteEPC(EPCData)

G2_WriteEPC方法改写UHF标签的EPC,EPC的字节长度必须是偶数,并且为16进制。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数:EPCData: 新的EPC,16进制,偶数个字节,否则后面补0x00.

回调函数返回结果:

FunctionID=26,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:新的EPC字符串
ValData:无

3.5、销毁UHF标签

G2_KillTag()

G2_KillTag方法销毁当前的UHF标签.密码0不允许销毁.
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
无参数

回调函数返回结果:

FunctionID=27,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无 
ValData:无

3.6、设置UHF标签内存保护

G2_SetProtected(ProtectByte, ProtectMode)

G2_SetProtected方法设置UHF标签的保护模式.
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数:ProtectByte:要设置保护的内容:
0x00 时,控制销毁密码读写保护设定。
0x01 时,控制访问密码读写保护设定。
0x02 时,控制EPC 存储区读写保护设定。
0x03 时,控制TID 存储区读写保护设定。
0x04 时,控制用户存储区读写保护设定。
ProtectMode可能值如下:
当ProtectByte 为0x00 或0x01,即当设置Kill 密码区或访问密码区的时候,ProtectMode 的值代表的意义如下:
0x00:设置为无保护下的可读可写
0x01:设置为永远可读可写
0x02:设置为带密码可读可写
0x03:设置为永远不可读不可写
当ProtectByte为0x02、0x03、0x04的时候,即当设置EPC 区、TID 区及用户区的时候,ProtectMode 的值代表的意 义如下:
0x00:设置为无保护下的可写
0x01:设置为永远可写
0x02:设置为带密码可写
0x03:设置为永远不可写

回调函数返回结果:

FunctionID=28,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无
ValData:无

3.7、擦除UHF标签的内存区域

G2_Earse(memType,StartPos, EarseLength)

G2_Earse方法擦除UHF标签的内存。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数:memType:内存区域,0保留区,1EPC区,2TID区,3用户区
StartPos: 内存起始地址.(必须为偶数)
EarseLength:要擦除的字节长度.(必须为偶数)

回调函数返回结果:

FunctionID=29,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无.
ValData:无

3.8、设置UHF标签读保护

G2_SetReadProtected()

G2_SetReadProtected方法设置标签读保护。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
无参数.

回调函数返回结果:

FunctionID=30,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无.
ValData:无

3.9、解锁UHF标签读保护

G2_SetUnlockReadProtected()

G2_SetUnlockReadProtected方法解锁标签读保护。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
无参数.

回调函数返回结果:

FunctionID=31,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无.
ValData:无

3.10、设置UHF标签EAS报警

G2_SetEASAlert(EAS)

G2_SetEASAlert方法设置标签的EAS。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数, EAS: EAS值,一个字节

回调函数返回结果:

FunctionID=32,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无.
ValData:无

3.11、锁定UHF标签用户区

G2_LockUser(UserAddr)

G2_LockUser方法锁定用户内存。
需要的属性:
KeyStringMode:表明KeyString的格式,0为16进制字符串, 1为数字字符串.
KeyString:密钥字符串. 
参数, UserAddr: 用户内存地址值,一个字节

回调函数返回结果:

FunctionID=33,
Result:数字,函数执行后的返回值,
UID:自定义的序号,
CardNo:标签的EPC
strData:无.
ValData:无

 

上面的接口基本包含了UHF标签的所有功能,UHF读写器YW-602H读写距离70cm以内,能满足大部分需求.

js代码寻卡:

function G2Inventory()
{
	var isEPC;
	isEPC = GetValueFromName("isEPC");
	rfidreader.Repeat=0;
	rfidreader.G2_Inventory(isEPC);
}

返回来的数据即可得到EPC卡号:

rfidreader.onResult(function(resultdata)
{
	switch(resultdata.FunctionID)
    {
    	
		case 14:
        document.getElementById("CloudReaderVer").value = resultdata.strData;
        break;
		case 23:
		
		if(resultdata.Result>0)
		{
            document.getElementById("CardNo").value = resultdata.CardNo;	
		}
		else
		{
			document.getElementById("CardNo").value= GetErrStr(resultdata.Result);
		}
		break;
    }
}
);

开发起来比较简单

上一篇:3G UMTS与4G LTE核心网(二):4G网络概述


下一篇:通过Z-Order技术加速Hudi大规模数据集分析方案