基于sllurp库的Impinj R420 RFID测量:运行时配置与触发问题
解决方案
1. 运行时修改设备配置
要在运行时调整阅读器参数(比如发射功率、频率范围),核心逻辑是先暂停当前扫描任务,更新配置后再重启扫描。在fviard-develop-v2分支中,可按以下步骤操作:
- 调用
reader.stop_inventory()终止当前扫描 - 修改
LLRPReaderConfig实例的参数(如tx_power、frequency_hop_table),或直接调用阅读器的配置方法(如set_transmit_power()) - 若参数修改需要重新加载读写规范,调用
reader.create_rospec()更新配置,再执行reader.start_inventory()重启扫描
2. 手动触发单次测量并实现循环
默认connect()会自动启动持续扫描,要实现可控的单次扫描循环,需先禁用自动启动,再手动控制扫描启停:
- 初始化配置时设置
config.auto_start_inventory = False,避免连接后自动开始扫描 - 在循环中,每次调用
reader.start_inventory()启动单次扫描,等待扫描完成后调用reader.stop_inventory(),随后修改参数进入下一轮循环
修改后的示例代码
from sllurp import llrp from sllurp.llrp import LLRPReaderConfig, LLRPReaderClient, LLRP_DEFAULT_PORT import logging import time logging.getLogger().setLevel(logging.INFO) # 处理扫描到的标签 def tag_report_cb(reader, tag_reports): for tag in tag_reports: print(f'扫描到标签: {tag.get("epc")}') # 初始化配置,禁用自动启动扫描 config = LLRPReaderConfig() config.auto_start_inventory = False # 初始发射功率,从20dBm开始 initial_power = 20 config.tx_power = initial_power # 初始化阅读器客户端 host = "你的阅读器IP地址" reader = LLRPReaderClient(host, LLRP_DEFAULT_PORT, config) reader.add_tag_report_callback(tag_report_cb) try: # 连接阅读器 reader.connect() # 循环扫描,逐步提升功率(20到30dBm,每次加2) for power in range(initial_power, 31, 2): print(f"当前发射功率: {power} dBm,开始扫描...") # 更新发射功率配置 reader.config.tx_power = power # 重新生成读写规范使配置生效 reader.create_rospec() # 启动单次扫描,持续5秒 reader.start_inventory(duration=5) # 等待扫描完成 time.sleep(6) # 停止扫描 reader.stop_inventory() print("本轮扫描结束\n") except (KeyboardInterrupt, SystemExit): reader.disconnect() finally: if reader.is_connected(): reader.disconnect()
关键说明
start_inventory(duration=X):控制单次扫描的持续时长(单位:秒),到期后自动停止- 每次修改参数后调用
reader.create_rospec():确保新配置被阅读器加载生效 - 可根据需求调整循环中的参数类型,比如切换天线端口、调整频率跳变表等
内容的提问来源于stack exchange,提问作者Magzouu_
相关产品推荐
相关产品推荐

