首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python sllurp库读取摩托罗拉/斑马FX9500 RFID阅读器的标签清单

使用Python sllurp库读取摩托罗拉/斑马FX9500 RFID阅读器的标签清单
EN

Stack Overflow用户
提问于 2019-09-09 21:02:59
回答 1查看 1.3K关注 0票数 1

我正在尝试编写一个应用程序,用于读取使用斑马FX9500 RFID阅读器的标签库存。我试图从制造商的网站上安装软件开发工具包,但我不知道如何使用它,我也不熟悉C,C#或Java,所以我找到了一个Python库(sllurp),它使用LLRP协议与RFID阅读器进行通信。

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

代码语言:javascript
复制
# 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 = []“。

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

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

我试着自己调试,但只能到这一步。似乎我不能在这里张贴日志,因为它有太多的字符,但我在GIT here中打开了一个问题。

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 17:23:22

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

代码语言:javascript
复制
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),它在给定的一段时间后调用shutdown函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57854629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档