【问题标题】:Read the Tag Inventory of a Motorola/Zebra FX9500 RFID Reader using Python sllurp library使用 Python sllurp 库读取 Motorola/Zebra FX9500 RFID 阅读器的标签清单
【发布时间】:2023-04-08 21:42:01
【问题描述】:

我正在尝试编写一个应用程序,用于使用 Zebra FX9500 RFID 阅读器读取标签库存。我尝试从制造商网站安装 SDK,但不明白如何使用它,而且我也不熟悉 C、C# 或 Java,所以我找到了一个使用 LLRP 协议的 Python 库 (sllurp)与 RFID 阅读器通信。

git 的自述文件提供了一个示例代码,看起来很简单,应该会返回一些标签:

# Minimal example; see inventory.py for more.
from sllurp import llrp
from twisted.internet import reactor
import logging
logging.getLogger().setLevel(logging.INFO)

def cb (tagReport):
    tags = tagReport.msgdict['RO_ACCESS_REPORT']['TagReportData']
    print 'tags:', tags

factory = llrp.LLRPClientFactory()
factory.addTagReportCallback(cb)
reactor.connectTCP('myreader', llrp.LLRP_PORT, factory)
reactor.run()

使用这个,程序将返回“tags = []”。

库还提供了一个 CLI,用于从 RFID 阅读器获取库存。从命令行运行sllurp inventory,程序将开始与阅读器通信,并保持在看似无限的库存阅读循环中(阅读器上的 LED 一直闪烁)。在这一点上,我似乎只能通过使用 CTRL+C 来阻止它。停止后,程序将返回标签列表。

到目前为止一切顺利,但我实际上想连接到阅读器,只阅读一次(或几秒钟,我不知道)并获得一组标签。

尝试自己调试,但只能到此为止。好像不能在这里贴日志,因为字符太多了,但是我在GIThere打开了一个问题。

如果有人对 sllurp 模块或 LLRP 协议有任何经验,也许您可​​以提供帮助。我怎样才能停止库存读取循环?我可以发送一个 STOP_ROSPEC/ROSpecStopTrigger 来终止库存读数吗?我该怎么做?

谢谢!

【问题讨论】:

    标签: python rfid llrp


    【解决方案1】:

    如果有人遇到过同样的问题,我找到了一种做我想做的事情的方法:

    READER_IP_ADDRESS = '169.254.1.1'
    SCAN_TIME = 20
    
    def tagreportcb(llrp_msg):
        tags = llrp_msg.msgdict['RO_ACCESS_REPORT']['TagReportData']
        tag_list = set()
        for tag in tags:
            tag_list.add(tag.get('EPC-96',None))
        return tag_list
    
    def report(llrp_msg):
        tag_list = tagreportcb(llrp_msg)
        with open('tags.txt', mode='w+') as report:
            for tag in tag_list:
                if tag not in report.readlines():
                    report.write(str(tag)[2:26] + '\n')
    
    def shutdown(factory):
        return factory.politeShutdown()
    
    def main():
        factory = llrp.LLRPClientFactory(antennas=[0], duration=0.5)
        factory.addTagReportCallback(report)
        reactor.connectTCP(READER_IP_ADDRESS, llrp.LLRP_PORT, factory, timeout=3)
        reactor.addSystemEventTrigger('before', 'shutdown', shutdown, factory)
        # https://twistedmatrix.com/documents/current/core/howto/time.html
        reactor.callLater(SCAN_TIME, shutdown, factory)
        reactor.run()
    
    if __name__ == "__main__":
        main()
    

    我添加了reactor.callLater(SCAN_TIME, shutdown, factory),它会在给定时间后调用关闭函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2015-08-22
      相关资源
      最近更新 更多