使用 Python sllurp 库读取 Motorola/Zebra FX9500 RFID Reader 的标签清单
Read the Tag Inventory of a Motorola/Zebra FX9500 RFID Reader using Python sllurp library
我正在尝试编写一个应用程序来使用 Zebra FX9500 RFID reader 读取标签清单。我尝试从制造商网站安装 SDK,但无法理解如何使用它,而且我也不熟悉 C、C# 或 Java,所以我找到了一个 Python 库(sllurp) 使用 LLRP 协议与 RFID 通信 readers.
git 的自述文件提供了示例代码,看起来很简单,应该 return 一些标签:
# 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()
使用这个,程序将return "tags = []"。
图书馆还提供了一个 CLI,用于从 RFID reader 获取馆藏。 运行 sllurp inventory
从命令行开始,程序将开始与 reader 通信并保持在似乎无限的库存读取循环中(reader 上的 LED 保持闪烁)。此时我似乎只能使用 CTRL+C 来停止它。停止后,程序将 return 一个标签列表。
到目前为止一切顺利,但我实际上想连接到 reader,只读取一次(或几秒钟,我不知道)并获取一组标签。
自己尝试调试,但只能到此为止。好像我不能post这里的日志,因为它有太多的字符,但我在GIThere.
中打开了一个问题
如果有人对 sllurp 模块或 LLRP 协议有任何经验,也许你可以提供帮助。我怎样才能停止库存阅读循环?我可以发送 STOP_ROSPEC/ROSpecStopTrigger 来终止库存读取吗?我该怎么做?
谢谢!
如果有人遇到同样的问题,我找到了一种方法来做我想做的事:
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)
,它会在给定的时间段后调用关闭函数。
我正在尝试编写一个应用程序来使用 Zebra FX9500 RFID reader 读取标签清单。我尝试从制造商网站安装 SDK,但无法理解如何使用它,而且我也不熟悉 C、C# 或 Java,所以我找到了一个 Python 库(sllurp) 使用 LLRP 协议与 RFID 通信 readers.
git 的自述文件提供了示例代码,看起来很简单,应该 return 一些标签:
# 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()
使用这个,程序将return "tags = []"。
图书馆还提供了一个 CLI,用于从 RFID reader 获取馆藏。 运行 sllurp inventory
从命令行开始,程序将开始与 reader 通信并保持在似乎无限的库存读取循环中(reader 上的 LED 保持闪烁)。此时我似乎只能使用 CTRL+C 来停止它。停止后,程序将 return 一个标签列表。
到目前为止一切顺利,但我实际上想连接到 reader,只读取一次(或几秒钟,我不知道)并获取一组标签。
自己尝试调试,但只能到此为止。好像我不能post这里的日志,因为它有太多的字符,但我在GIThere.
中打开了一个问题如果有人对 sllurp 模块或 LLRP 协议有任何经验,也许你可以提供帮助。我怎样才能停止库存阅读循环?我可以发送 STOP_ROSPEC/ROSpecStopTrigger 来终止库存读取吗?我该怎么做?
谢谢!
如果有人遇到同样的问题,我找到了一种方法来做我想做的事:
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)
,它会在给定的时间段后调用关闭函数。