在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;
}
}
);
开发起来比较简单