更新记录
1.1.2(2026-08-20)
首次提交
平台兼容性
uni-app(4.72)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | Android插件版本 | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|
| - | × | - | - | - | - | 9.0 | 1.1.2 | - | - |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - | - |
官方 UHF Reader 插件
一个用于 uni-app 的 UTS 插件,提供超高频 RFID(UHF)读写器功能。支持连接各种品牌的 PDA 设备和第三方 UHF Reader,实现标签盘点、数据读写、参数设置等完整的 RFID 操作能力。
特性
- 支持多种 PDA 平台:兼容驿格科技、班克曼、森得瑞、东大集成等主流品牌
- 完整的 RFID 功能:标签盘点、读取、写入、锁定和灭活
- 灵活的盘点模式:普通、快速、智能和自定义模式
- 丰富的参数配置:射频功率、频率区域、防冲突算法等可调节参数
- 高级功能支持:固件升级、高级命令执行、传感器读取
- 双模扫描支持:RFID 盘点与条码扫码并行工作
- 实时回调机制:标签数据、错误诊断、硬件按键事件监听
适用场景
- 仓库物流管理:货物标签批量盘点
- 零售门店管理:商品防盗标签查询
- 生产制造:原材料和产品追踪
- 医疗护理:药品和器械识别
- 图书管理:书籍借阅和盘点
硬件设备
支持的设备型号
本插件兼容以下 UHF RFID 设备:
主流 PDA 设备:
- 驿格科技:R20(型号:k62v1_6c)超高频数据采集终端
- 班克曼:K62V1_6C 等型号
- 森得瑞:ST907、ST908、ST308W、T8939 等系列
- 东大集成:IDATA 系列 PDA
- 其他品牌:包括海康威视、斑比特、汉德合力等
Reader 规格参数
通信接口:
- 串口类型:UART TTL/RS232
- 波特率:默认 115200(支持 9600~921600 可配置)
- 串口地址:
/dev/ttyS1(根据平台不同可能有所变化)
射频性能:
- 频段范围:902MHz ~ 928MHz(中国)、865MHz ~ 868MHz(欧洲)、902MHz ~ 928MHz(美国)
- 读取功率:最大可达 33dBm(10000)
- 写功率:最大可达 30dBm(10000)
- 灵敏度:≤ -86dBm
支持的协议标准:
- ISO/IEC 18000-63 (EPC Global Gen2)
- ISO/IEC 18000-6B
天线配置:
- 单口或多口可选
- 典型配置:1~4 个天线端口
- 每端口最大输出功率可调
设备信息读取: 连接成功后可通过回调获取以下设备信息:
- 硬件版本:Reader 硬件版本号
- 固件版本:当前运行的固件版本号
- 序列号(SN):设备的唯一标识符
- 可用天线数量:已连接的天线端口数
安装使用
1. 引入插件
在项目中通过 HBuilderX 插件市场导入插件,或在 manifest.json 中添加依赖:
{
"uni-modules": {
"hl-uhf-reader": {}
}
}
2. 权限配置
确保在 manifest.json 中配置以下 Android 权限:
{
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.CP213xx_ACCESS\"/>",
"<uses-permission android:name=\"android.permission.BLUETOOTH\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
]
}
}
3. 基础用法示例
初始化插件
首先需要初始化和释放插件资源:
import * as UhfReader from '@/uni_modules/hl-uhf-reader'
// 初始化
UhfReader.init((result) => {
if (result.code === 0) {
console.log('插件初始化成功')
} else {
console.error('初始化失败:', result.message)
}
})
连接 Reader
连接到 RFID 读写设备:
UhfReader.connect({
platform: 'NONE', // PDA 平台类型
address: '/dev/ttyS1', // 串口地址
baudRate: 115200, // 波特率
antennaCount: 1 // 天线口数量
}, (result) => {
if (result.code === 0 && result.connected) {
console.log('连接成功')
console.log('硬件版本:', result.hardwareVersion)
console.log('固件版本:', result.softwareVersion)
console.log('序列号:', result.readerSerialNumber)
}
})
标签盘点(Inventory)
开始或停止标签盘点:
启动盘点:
UhfReader.startInventory({
protocols: ['GEN2'], // 协议类型:GEN2 或 ISO18000_6B
mode: 'normal', // 盘点模式:normal/fast/smart/custom
antennas: [1], // 使用的天线列表
readTimeMs: 1000, // 每次读取时长(毫秒)
readIntervalMs: 200, // 读取间隔(毫秒)
playSound: true // 是否播放提示音
}, (result) => {
if (result.code === 0) {
console.log('盘点已启动')
}
})
停止盘点:
UhfReader.stopInventory((result) => {
console.log(result.code === 0 ? '盘点已停止' : '停止失败')
})
监听标签数据
注册标签回调,实时获取盘点到的标签:
// 注册标签监听
UhfReader.onTag((event) => {
console.log('发现新标签')
console.log('EPC:', event.epc) // 标签唯一标识
console.log('TID:', event.tid) // 标签不可变 ID
console.log('天线 ID:', event.antennaId)
console.log('信号强度:', event.rssi, 'dBm')
console.log('频率:', event.frequency, 'MHz')
})
// 取消标签监听
UhfReader.offTag()
读取单个标签
读取指定内存区域的数据:
UhfReader.readTag({
antennaId: 1, // 天线 ID
bank: 1, // 存储区:1=EPC, 2=Reserved, 3=User
startAddress: 2, // 起始字地址
wordCount: 6, // 读取字数
accessPassword: '00000000' // 访问密码
}, (result) => {
if (result.code === 0) {
console.log('读取成功:', result.data)
}
})
写入单个标签
向标签写入数据:
UhfReader.writeTag({
antennaId: 1,
bank: 3, // User 存储区
startAddress: 0,
data: 'DEADBEEF', // 十六进制数据
accessPassword: '00000000'
}, (result) => {
console.log(result.code === 0 ? '写入成功' : '写入失败')
})
设置 Reader 参数
修改 RF 射频参数:
// 先读取当前参数
UhfReader.getReaderSettings((settingsResult) => {
const settings = {
readPowers: [3000, 3000], // 读功率:每个天线的 dBm*100
writePowers: [3000, 3000], // 写功率
region: 1, // 区域代码:1=US, 2=CN, 6=EU
frequencies: [920000, 960000], // 频点范围(kHz)
session: 1, // Session:1/2/3/4
qValue: 8, // 防冲突 Q 值
tari: 16 // Tari 时间基准
}
// 写入参数
UhfReader.setReaderSettings(settings, (result) => {
console.log(result.code === 0 ? '参数设置成功' : '设置失败')
})
})
固件升级
通过串口更新 Reader 固件:
// 注意:需要先将固件文件放置到应用可访问目录
const firmwareOptions = {
filePath: '/sdcard/download/firmware.bin',
address: '/dev/ttyS1',
platform: 'NONE'
}
let progressCallback = (event) => {
console.log(`升级进度:${event.progress}%`)
console.log(`阶段:${event.phase}, 消息:${event.message}`)
}
// 监听升级进度
UhfReader.onFirmwareProgress(progressCallback)
// 开始升级
UhfReader.startFirmwareUpgrade(firmwareOptions, (result) => {
console.log(result.code === 0 ? '升级完成' : '升级失败')
UhfReader.offFirmwareProgress()
})
手柄扫码功能
启用扫描引擎进行条码采集:
// 打开扫码服务
UhfReader.scannerOpen((result) => {
if (result.code === 0) {
// 开启扫码监听
UhfReader.onScanResult((event) => {
if (event.success) {
console.log('条码内容:', event.text)
console.log('条码类型:', event.dataType)
} else {
console.log('扫码失败:', event.failDetail)
}
})
// 启动扫码引擎
UhfReader.scannerStart((result) => {
console.log(result.code === 0 ? '扫码引擎启动成功' : '启动失败')
})
}
})
// 关闭时清理
UhfReader.scannerStop(() => {})
UhfReader.offScanResult()
UhfReader.scannerClose(() => {})
硬件按键监听
接收硬件扳机按键事件:
// 监听扳机按键
UhfReader.onTrigger((event) => {
console.log(event.action === 'down' ? '扳机按下' : '扳机松开')
})
// 监听硬件切换键
UhfReader.onHardwareKey((event) => {
console.log('目标:', event.target) // rfid/scanner
console.log('按键码:', event.keyCode)
console.log('模式变更:', event.modeChanged)
})
// 使用完后取消监听
UhfReader.offTrigger()
UhfReader.offHardwareKey()
API 参考
核心函数
| 函数名 | 说明 |
|---|---|
| init(callback) | 初始化插件 |
| release(callback) | 释放插件资源 |
| connect(options, callback) | 连接 Reader 设备 |
| disconnect(callback) | 断开连接并下电 |
| startInventory(options, callback) | 启动标签盘点 |
| inventoryOnce(options, callback) | 一次性盘点 |
| stopInventory(callback) | 停止盘点 |
| readTag(options, callback) | 读取标签数据 |
| writeTag(options, callback) | 写入标签数据 |
| lockTag(options, callback) | 锁定标签 |
| killTag(options, callback) | 灭活标签 |
| getReaderSettings(callback) | 获取 Reader 参数 |
| setReaderSettings(settings, callback) | 设置 Reader 参数 |
| runAdvancedOperation(operation, callback) | 执行高级操作 |
| startFirmwareUpgrade(options, callback) | 固件升级 |
事件监听
| 函数名 | 说明 |
|---|---|
| onTag(callback) / offTag() | 标签回调 |
| onTrigger(callback) / offTrigger() | 扳机按键回调 |
| onHardwareKey(callback) / offHardwareKey() | 硬件切换键回调 |
| onScanResult(callback) / offScanResult() | 扫码结果回调 |
| onDiagnostic(callback) / offDiagnostic() | Reader 诊断回调 |
| onScannerDiagnostic(callback) / offScannerDiagnostic() | 扫码引擎诊断回调 |
| onFirmwareProgress(callback) / offFirmwareProgress() | 固件升级进度回调 |
扫码控制
| 函数名 | 说明 |
|---|---|
| scannerOpen(callback) | 打开扫码服务 |
| scannerClose(callback) | 关闭扫码服务 |
| scannerStart(callback) | 启动扫码引擎 |
| scannerStop(callback) | 停止扫码引擎 |
| setScannerSettings(settings, callback) | 设置扫码参数 |
| setScannerParameter(param, value, callback) | 设置扫码参数 |
支持的 PDA 平台
插件支持以下 PDA 平台型号(使用前需选择对应的 platform):
NONE, CHAINWAY, COMMANDLIST, SCAN_ALPS_ANDROID_CUIUS2, ALPS_KT45, HD508, IDATA, JIEBAO, EKEMP, SENTER_ST308W, SENTER_ST907, HANDEHUOER_12, KK, CZ880, XIANSHI, XBANG, SENTER907, ALPS_KT45Q, Urovo_31, Urovo_31Q, K06SS_A, HANDEHUOER_13, SENTER907_PDA_T8939, ST908, ST907Ver2, IDATA_95w4g, MT6737, PAX, ST917, ST917_V2, ZoomSmart, SD60RT, C72, SD55, vq513, iDat50, PAX2, C7000, ALi, HDBX6, JAHT, SD50, ST55, HANDEHUOER_13_C0
盘点模式
- normal:标准盘点模式
- fast:快速盘点模式
- smart:智能盘点模式,需配置 IT Mode
- custom:自定义周期模式,可设置 readTimeMs 和 readIntervalMs
- temperature:温度标签盘点
Reader 参数说明
| 参数名 | 说明 | 单位/范围 |
|---|---|---|
| readPowers | 读取功率 | dBm*100 |
| writePowers | 写入功率 | dBm*100 |
| region | 区域代码 | 1=US, 2=CN, 6=EU |
| frequencies | 频点列表 | kHz |
| session | 会话模式 | 1~4 |
| qValue | Q 值 | 0~15 |
| target | 目标值 | 0~3 |
| tari | 时间基准 | 数值 |
| encoding | 编码方式 | 数值 |
| writeMode | 写模式 | 数值 |
| hopTimeMs | 跳频间隔 | 毫秒 |
| lbtEnabled | LBT 使能 | true/false |
常见问题
Q1: 连接失败怎么办?
检查以下几点:
- 确认串口地址和波特率正确
- 确认 Reader 已通电
- 检查 platform 是否选择正确
- 查看日志中的错误详情
Q2: 无法读取到标签?
可能的原因:
- 检查天线是否正确连接
- 调整天线数量设置为真实使用的端口数
- 调整读写功率参数
- 确认标签符合 Gen2 或 ISO18000-6B 标准
- 靠近标签测试,排除距离问题
Q3: 盘点速度很慢?
优化建议:
- 使用 fast 模式提高盘点速度
- 适当减小 Q 值和 Target 值
- 缩短 readTimeMs 和 readIntervalMs
- 减少天线数量或使用单个天线
- 添加过滤器限制匹配范围
Q4: 如何判断操作成功或失败?
所有异步操作的回调都会返回一个包含 code 字段的对象:
- code === 0:操作成功
- code !== 0:操作失败,message 字段包含错误描述
开发调试
日志查看
插件会在运行时记录操作日志,方便排查问题:
function log(message, payload) {
console.log(`${new Date().toLocaleTimeString()} ${message}`,
payload ? JSON.stringify(payload) : '')
}
错误处理
建议在调用每个接口时都做好错误处理:
myFunction(options, result => {
if (result.code === 0) {
// 成功逻辑
} else {
// 失败逻辑
console.error('错误代码:', result.code)
console.error('错误信息:', result.message)
console.error('详细信息:', result.detail)
}
})
技术支持
如需技术支持或反馈问题,请参考示例项目 pages/uhf-reader-demo 获取完整的代码实现和使用演示。
许可证
本插件遵循相应的开源许可协议。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 330
赞赏 0
下载 12521818
赞赏 1943
赞赏
京公网安备:11010802035340号