For one of our experiments, we have been trying to maximize the number of reads per second from a single RFID tag using an Impinj Speedway reader. At the moment, the best we are able to do is about 1 read per second (if there are more tags in range, we’ll get more reports per second). Has anyone in the community managed to get a higher sampling rate (=higher read rates) and could share their ADD_ROSPEC message? Our ADD_ROSPEC is posted below .
ADD_ROSPEC Message:
<?xml version=”1.0″ encoding=”UTF-8″?>
<llrp:ADD_ROSPEC xmlns:llrp=”http://www.llrp.org/ltk/schema/core/encoding/xml/1.0″ Version=”1″ MessageID=”4″>
<llrp:ROSpec>
<llrp:ROSpecID>1</llrp:ROSpecID>
<llrp:Priority>0</llrp:Priority>
<llrp:CurrentState>Disabled</llrp:CurrentState>
<llrp:ROBoundarySpec>
<llrp:ROSpecStartTrigger>
<llrp:ROSpecStartTriggerType>Immediate</llrp:ROSpecStartTriggerType>
</llrp:ROSpecStartTrigger>
<llrp:ROSpecStopTrigger>
<llrp:ROSpecStopTriggerType>Null</llrp:ROSpecStopTriggerType>
<llrp:DurationTriggerValue>0</llrp:DurationTriggerValue>
</llrp:ROSpecStopTrigger>
</llrp:ROBoundarySpec>
<llrp:AISpec>
<llrp:AntennaIDs>0</llrp:AntennaIDs>
<llrp:AISpecStopTrigger>
<llrp:AISpecStopTriggerType>Null</llrp:AISpecStopTriggerType>
<llrp:DurationTrigger>0</llrp:DurationTrigger>
</llrp:AISpecStopTrigger>
<llrp:InventoryParameterSpec>
<llrp:InventoryParameterSpecID>9</llrp:InventoryParameterSpecID>
<llrp:ProtocolID>EPCGlobalClass1Gen2</llrp:ProtocolID>
<llrp:AntennaConfiguration>
<llrp:AntennaID>0</llrp:AntennaID>
<llrp:RFTransmitter>
<llrp:HopTableID>1</llrp:HopTableID>
<llrp:ChannelIndex>0</llrp:ChannelIndex>
<llrp:TransmitPower>71</llrp:TransmitPower>
</llrp:RFTransmitter>
<llrp:C1G2InventoryCommand>
<llrp:TagInventoryStateAware>0</llrp:TagInventoryStateAware>
<llrp:C1G2RFControl>
<llrp:ModeIndex>0</llrp:ModeIndex>
<llrp:Tari>0</llrp:Tari>
</llrp:C1G2RFControl>
<llrp:C1G2SingulationControl>
<llrp:Session>2</llrp:Session>
<llrp:TagPopulation>8</llrp:TagPopulation>
<llrp:TagTransitTime>0</llrp:TagTransitTime>
</llrp:C1G2SingulationControl>
</llrp:C1G2InventoryCommand>
</llrp:AntennaConfiguration>
</llrp:InventoryParameterSpec>
</llrp:AISpec>
<llrp:ROReportSpec>
<llrp:ROReportTrigger>Upon_N_Tags_Or_End_Of_AISpec</llrp:ROReportTrigger>
<llrp:N>1</llrp:N>
<llrp:TagReportContentSelector>
<llrp:EnableROSpecID>0</llrp:EnableROSpecID>
<llrp:EnableSpecIndex>0</llrp:EnableSpecIndex>
<llrp:EnableInventoryParameterSpecID>0</llrp:EnableInventoryParameterSpecID>
<llrp:EnableAntennaID>1</llrp:EnableAntennaID>
<llrp:EnableChannelIndex>1</llrp:EnableChannelIndex>
<llrp:EnablePeakRSSI>1</llrp:EnablePeakRSSI>
<llrp:EnableFirstSeenTimestamp>1</llrp:EnableFirstSeenTimestamp>
<llrp:EnableLastSeenTimestamp>1</llrp:EnableLastSeenTimestamp>
<llrp:EnableTagSeenCount>1</llrp:EnableTagSeenCount>
<llrp:EnableAccessSpecID>0</llrp:EnableAccessSpecID>
<llrp:C1G2EPCMemorySelector>
<llrp:EnableCRC>1</llrp:EnableCRC>
<llrp:EnablePCBits>1</llrp:EnablePCBits>
</llrp:C1G2EPCMemorySelector>
</llrp:TagReportContentSelector>
</llrp:ROReportSpec>
</llrp:ROSpec>
</llrp:ADD_ROSPEC>
I discovered that changing the “TagTransitTime” enables me to control the maximum number of times the reader reads the tag. For large values of transit time, the reader returned a read rate of rougly 2 reads/second. But with smaller (non-zero) values I was able to attain rates larger than 200 reads/second.
PS: I am using the Impinj Speedway reader with session 2 and mode index 0.
Correction. It’s the session type which enables me to do that, not the tag transit time.
You could also change the search mode to Dual Target:
searchMode.InventorySearchMode = ENUM_ImpinjInventorySearchType.Dual_Target;
Note that when SarchMode = Dual_Target then session setting does not matter (is ignored by reader).