Why Your RFID Portal Misses Tags — and Why It Reads Too Many
Two complaints about the same dock door, a fortnight apart. First the portal misses a pallet a handheld reads instantly. Then it books in three pallets from the next bay. Both get escalated as hardware faults, and both are almost always settings. Every cause and fix below is anchored on a clause number or a published table, and the arithmetic assumes a four-antenna dock-door portal in the 865–868 MHz lower band.
In the lower band, the standard asks a portal to transmit when there is something to read
Most portals that miss tags transmit all the time. The lower band asks for the opposite. ETSI EN 302 208 V3.3.1 (2020-08), clause 4.2.1: “For the lower band interrogators shall support trigger techniques that indicate the presence or arrival of objects that may be tagged.” The same clause adds that such an interrogator “shall stop transmitting after it has ceased to read any further tags”.
Clause 4.3.7.3 caps transmission at “no greater than is required to read the tags present in the field and to verify that there are no additional tags present”, then names the mechanisms it accepts: “triggers for motion, light beam or by applying a duty cycles for polling”. Its figure 7 fixes the numbers: on-duration not exceeding 4 s, off-duration not less than 100 ms. Hence the different behaviour of an imported upper-band configuration — “There is no specific limit to the length of transmission for interrogators when transmitting in the upper band.”
India carries the requirement with the band. G.S.R. 853(E), notified at New Delhi on the 10th December 2021 “in supersession of” the 2005 rules, sets 865–868 MHz at 2 W e.r.p. with channels of ≤ 200 kHz, names EN 302 208 in its Table-IV, and repeats the limits: continuous transmission “shall not exceed 4s”, with at least 100 ms before the next on that channel.
Cause: always-on polling. Fix: gate the inventory on a photo-eye or motion sensor wired to a general-purpose input — what a tier-one vendor ships as its dock-door configuration. Zebra’s “Dock Door with Motion Sensor” profile “can be customized to include the additional GPI trigger to link door open/close”. On the Modbus TCP map it is one write: Trigger Config at holding register 43400, StartTriggerType 2 for GPI.
Session flags: the decision table with the standard’s own numbers
The commonest cause of “it read the pallet once and never again” is a session flag left at B. The numbers come from Table 6-21 of the EPC Gen2 standard, Release 3.0.1, ratified February 2026.
| Flag | Tag energized | Tag not energized | Extended temperature |
|---|---|---|---|
| S0 | indefinite | none | — |
| S1 | 500 ms < persistence < 5 s | 500 ms < persistence < 5 s | not specified |
| S2 | indefinite | 2 s < persistence | not specified |
| S3 | indefinite | 2 s < persistence | not specified |
| SL | indefinite | 2 s < persistence | not specified |
Three things decide portal behaviour. S1 is the one inventoried flag that reverts while the tag is still powered — clause 6.3.2.2: “Because the S1 inventoried flag is not automatically refreshed, it may revert from B to A even when the Tag is powered.” The same clause holds it steady inside a round, forbidding the change “as the result of a persistence timeout while the Tag is participating in an inventory round”.
Second, every row except S0 carries “extended temperature range: not specified” — a real caveat for a yard or a cold store, and the argument for a site survey over a datasheet default.
Third, the unpowered figure for S2 and S3 is a floor, and the real value runs far above it. RAIN puts a number on it: “While the minimum is 2 seconds, the actual value at room temperature can be above 1 minute and even much longer for low temperatures. In general, S2 and S3 might never be assumed to be reset”.
That yields a two-number test. RAIN’s rule: “if the tag volume divided by reader throughput is greater than 0.5 seconds, then the reader must use session S2 or S3 for reliability”. For 300 tags at the 100 tags per second of RAIN’s passive-UHF example, 300 ÷ 100 = 3.0 s — six times the 500 ms S1 floor.
Symptom: read once, then quiet on later passes. Cause: S2 or S3 holding at B, with persistence that can outlast the shift. Fix: inventory in both directions — alternate the target A and B, exposed by readers as Target = AB or dual target — or open every round with a Select that sets the flag to A.
Why S0 re-reads: the field dies on every hop and every antenna switch
The other half of the session question is a busy portal left on S0, whose persistence when the tag is not energized is “none”. That reads as harmless; in practice the field dies constantly.
RAIN’s worked case: “Approximately 20 tags in read zone, 100 tags per second throughput, then ‘number of tags / throughput’ = 200 ms (milliseconds), which is less than the FCC part 15 max dwell time of 400 ms.” All twenty are read in one dwell. Raise the population to 50 and the reader “cannot singulate all of them prior to the frequency hop. All tags reset on the hop.”
The structural point sits above the regulatory one: “even without this dwell time limit, the reader must disable RF power to switch antennas or frequency channels.” A four-antenna portal drops its carrier three times per round-robin whatever the regulator, and every gap clears S0. The lower band is the easier place to work, and RAIN says so: S0 “can be used when supporting ETSI EN 302208 as this standard allows the channel use for 4 seconds dwell time” — ten times the room on one channel.
Where S0 belongs is where RAIN puts it: “particularly useful with small populations of fast-moving tags. For example, in conveyor systems or vehicle tolling.” Shipped profiles vary — Zebra’s Conveyor profile pairs a population of 5 with S2 — so let population and dwell decide the session.
Q, and the population you never declared
Q is the exponent sizing the arbitration frame, and a dock door earns its own value. Clause 6.3.2.6.8: “Tags shall implement a 15-bit slot counter”, and on a Query a tag loads “a value between 0 and 2^Q −1, drawn from the Tag’s RNG”, with Q “an integer in the range (0, 15)”.
The reference loop in Annex D starts low and walks up: Qfp = 4.0; Q = round(Qfp); Query(Q); zero responses lower Qfp by Δ, more than one raise it, exactly one leaves it alone. “Typical values for Δ are 0.1 < Δ < 0.5”, with small Δ when Q is large.
Hence the missed first pass. Qfp = 4.0 means 2^4 = 16 slots, while a 300-tag pallet wants Q ≈ log2(300) = 8.23, or 256 to 512 slots. Climbing 4.23 in Qfp takes 9 rounds at Δ = 0.5, about 15 at Δ = 0.3, and 43 at Δ = 0.1 — each collision-dominated. If the load clears the zone in under a second, adaptation is still converging as the pallet leaves.
Declared populations in one shipped profile set:
| Profile | Session | Target | Sel | Tag population |
|---|---|---|---|---|
| Default | S0 | A | SL ALL | 100 |
| Maximum Data Rate | S0 | A/B | SL ALL | 300 |
| Dock Door with Motion Sensor | S2 | A | SL ALL | 300 |
| Conveyor | S2 | A | SL ALL | 5 |
| Transition Point | S2 | A | SL ALL | 300 |
Fix: declare the real population per portal instead of accepting a global default, and make Q adaptation — start value, Δ, re-adaptation per round — a tender line rather than a commissioning surprise. Where population varies pass to pass, set it near the upper end of normal traffic: over-declaring costs empty slots, which are cheap, and under-declaring costs collision rounds, which are not.
Slots, not tags: identifying n tags costs about n·e slots
Dwell budgets are usually sized from the tag count. The protocol spends slots, and the two differ by a factor of about 2.7.
Gen2 arbitration belongs to the dynamic-frame Aloha family, where the formal result is settled. Barletta, Borgonovo and Cesana (arXiv:1202.3914v2, 10 Mar 2013) prove that “the maximum efficiency is achieved by setting the frame length equal to the backlog size at each subsequent frame”, that the asymptotic efficiency in the optimal case is 1/e ≈ 36.8%, and that the length of the whole transmission period behaves asymptotically as n·e − ζ·ln(n), with ζ = 0.5 ÷ ln(1 − 1/e).
Read that constant carefully, because its sign decides which way the correction goes: ln(1 − 1/e) = ln(0.6321) = −0.4587, so ζ = −1.090, and subtracting a negative gives n·e + 1.090·ln(n). Identifying n tags costs a little more than n·e slots, not a little less.
| Tags (n) | n × e | + 1.090 × ln(n) | Slots to identify all |
|---|---|---|---|
| 20 | 54.4 | 3.27 | 58 |
| 60 | 163.1 | 4.46 | 168 |
| 100 | 271.8 | 5.02 | 277 |
| 300 | 815.5 | 6.22 | 822 |
So a 300-tag pallet costs about 822 slots, not 300 — with Q set perfectly. In the lower band the 4 s per-channel limit leaves 4 000 ms ÷ 822 = 4.87 ms per slot, which is ample. Against the 400 ms channel dwell RAIN cites for FCC part 15, the same 822 slots get 400 ÷ 822 = 0.49 ms each.
Fix: size the dwell from n·e slots at the configured backscatter link frequency — 320 kHz with Miller M=4 in the Indian and European profile — then check it against the time the load is in the zone.
Antenna cycle time against time in zone
A portal can be perfectly tuned and still get one shot at a pallet, because the antennas take turns. The figure to compute is complete round-robin cycles per pass. Zebra’s Conveyor profile sets antenna dwell to “25 ms per antenna”; four antennas is then a 100 ms cycle. A forklift:
- 8 km/h = 8 × 1 000 ÷ 3 600 = 2.22 m/s.
- A 2 m read zone along the direction of travel gives 2 ÷ 2.22 = 0.90 s in zone.
- 0.90 s ÷ 100 ms = 9 complete four-antenna cycles.
Per-antenna dwell is therefore the setting that decides how many of your antennas are in the pass at all. At 25 ms all four take part in every pass of a 0.90 s transit. Raise it to 500 ms, as people do when chasing one difficult tag, and the cycle becomes 2 s: a single antenna covers the whole pass, whichever one happens to be live. Complete cycles per pass at a 100 ms cycle:
| Forklift speed | 1.5 m zone | 2 m zone | 3 m zone |
|---|---|---|---|
| 4 km/h (1.11 m/s) | 13 | 18 | 27 |
| 8 km/h (2.22 m/s) | 6 | 9 | 13 |
| 12 km/h (3.33 m/s) | 4 | 6 | 9 |
Design rule: keep cycle time comfortably shorter than time in zone, and choose zone depth for the speed. Where traffic is fast, depth is usually cheaper than power.
The over-read half: two places to stop a read, and the one that saves air time
A portal reporting the next bay’s pallets is the failure that gets a deployment switched off, because every false receipt has to be undone by hand.
There are two places to stop an unwanted read, and they cost very differently. The Gen2 Select command, clause 6.3.2.12.1.1, “allows an Interrogator to select a Tag subpopulation based on user-defined criteria, enabling union, intersection, and negation based Tag partitioning”. It takes Target, Action, MemBank, Pointer, Length, Mask and Truncate, and sets either SL or the inventoried flag in any one of the four sessions — a pre-filter on the air interface, so the round contains the tags in scope and every slot goes to one of them.
A vendor register map makes the layering literal. Pre-filters occupy holding registers from 41700 upward, and their Action field points the integrator at “the Select Command Section under C1G2 Specification”, with Target taking SL or S0 through S3 — it is the Select. Post-Filter Config at register 43500 is a different animal, carrying PeakRSSILowerLimit, PeakRSSIUpperLimit and PeakRSSIMatchRange. An RSSI window is software, applied after singulation: it tidies the report, while the air-time saving comes from the Select pre-filter.
When you filter on air, negate rather than affirm. RAIN’s rule comes from baggage handling, where a portal must read the bag tag and ignore garment tags inside the suitcase: “As tags that miss the select commands due to e.g. RF disturbance would be lost, it is more appropriate to not select the tags that are not intended.” Deselect the out-of-scope class and a tag that missed the Select still gets read.
The duplicate-report fix is simpler than most integrators assume. Periodic reporting collapses repeats: set the report duration to the time items spend in the field. The Modbus guide’s example is items “in the field of Antenna Visibility for about 30 seconds” on a conveyor belt, so PeriodicReportDuration is set to 30 and “each tag is reported only once”. The same arithmetic applies at a dock door with the dwell measured there.
| Stray-read symptom | Cause | Fix |
|---|---|---|
| Same tag reported hundreds of times | Every read reported; nearest tags read most | Set periodic report duration to dwell time in field |
| Tags from the next bay booked in | e.r.p. and beam reach past the door | Reduce power, narrow azimuth, shield the divider |
| Stationary stock re-reported each round | Session persistence expired between passes | Move to S2 or S3 and hold the flag at B |
| A second tag class reported alongside the load | Filtering done in software only | Add an air-interface Select that deselects the out-of-scope class |
Keep the layers in their places: air-interface filtering for population, software filtering for business logic. Deduplication and direction belong upstream — on the reader or an edge service such as ReaderSense Edge MDM — so the warehouse management system receives movements.
Geometry, and the door next to yours
Power and beamwidth are coupled in the lower band, and the coupling is a legal one. Clause 4.3.4.2 defines beamwidth as “the angle between the two half-power (-3 dB) points of the main lobe, when referenced to the peak effective radiated power of the main lobe”. Clause 4.3.4.3 then caps it, in the horizontal orientation only.
| Transmitted e.r.p. | Lower band 865–868 MHz | Upper band 915–921 MHz |
|---|---|---|
| ≤ 500 mW | no restriction | no restriction |
| > 500 mW to ≤ 1 000 mW | ≤ 180° | no restriction |
| > 1 000 mW to ≤ 2 000 mW | ≤ 90° | ≤ 180° |
Two consequences. Because the limit is stated for the horizontal orientation, a narrow azimuth paired with a wide elevation pattern is the conforming way to cover a door’s full height at 2 W. And a catalogue panel quoted at 100° sits above the 90° ceiling that applies above 1 W, so it belongs on a portal configured at or below 1 W e.r.p. Pair 2 W portals with ≤ 90° azimuth antennas, or trade the power for the width.
The adjacent-door question then becomes arithmetic, and the e.r.p. you chose above decides which row of the table you are on. Clause 4.2.5 assigns the category by power: above 30 dBm e.r.p. — above 1 W — is Category I, and “an interrogator with an effective radiated power that does not exceed 30 dBm e.r.p shall be designated a Category II interrogator”. Table 1b describes Category I with a dock door as its own example, the level used where reader-to-tag distance is “often greater than 10 m”, but the designation follows the power setting. Receiver sensitivity from Table 2a (clause 4.4.5.3) is −60 dBm for Category I and −55 dBm for Category II. The adjacent channel is defined at ±0.6 MHz from the selected channel centre (clause 4.4.1.2), and adjacent-channel selectivity “shall be equal to or better than -26 dBm” (clause 4.4.1.3). So:
- Portal above 1 W e.r.p. (Category I): −26 dBm − (−60 dBm) = 34 dB of guaranteed adjacent-channel margin. Intermodulation, tested with unwanted signals at fc + 0.6 MHz and fc + 1.2 MHz against a limit of −34 dBm (clause 4.4.6), leaves 26 dB.
- Portal above 13 dBm and at or below 1 W e.r.p. (Category II): the same two limits against a −55 dBm sensitivity give 29 dB adjacent-channel and 21 dB intermodulation margin.
The channel plan follows from the four high-power lower-band channels, centred at 865.7, 866.3, 866.9 and 867.5 MHz and spaced 600 kHz. Pair two neighbouring doors 1.2 MHz apart — 865.7 with 866.9, or 866.3 with 867.5 — which clears the ±0.6 MHz adjacent-channel case by a full channel. Clause 4.4.6 tests intermodulation at both fc + 0.6 MHz and fc + 1.2 MHz, so a third door in the same line lands on one of the two tested offsets whichever of the four channels it takes. Resolve that third door physically rather than by channel number: spacing along the wall, a shielded bay divider, and the margins above are what it relies on. The same discipline carries into pallet-level tracking and the outbound logistics and supply chain handover.
The one setting that survives every other mistake
One habit removes a whole class of intermittent faults: establish tag state at the top of every round, so the round begins from a known flag rather than from an assumption about your own carrier.
Multipath, not weak signal, explains a good share of misses. RAIN states the mechanism precisely: “If the fade condition drops the RF field strength by a sufficient amount, passive tags will lose power and then power-up again once the fade condition is no longer present. All state and session information in the passive tag is lost due to the fade condition.” A read-rate average smooths this away, so it presents as a flaky tag.
Battery-assisted parts resist it with RF fade control, holding state across a brief dropout; the values are fixed rather than continuous, “125 µs, 1 ms, 10 ms, and 100 ms with the default being 10 ms”. For passive populations the equivalent insurance is a Select at the top of every round. RAIN’s good example is exactly that: “The difference between the two examples is the addition of the Select command at the start of each inventory session” — the version in which the reader assumes nothing about the tags.
Dense interrogator mode closes the loop. Clause 4.2.1 describes tags “which are activated by an interrogator transmitting in a high power channel” responding “in the adjacent low power channels”, separating reader and tag frequencies so several interrogators can share a channel. The tag side is capped at −20 dBm e.r.p. in the lower band (clause 4.5.1.3), a limit the standard derives over a 320 kHz bandwidth for the tag’s wanted emissions — the same 320 kHz that appears as the backscatter link frequency in the regional profile. RAIN’s regional table lists India’s IN8A and Europe’s EU8A identically in every column: 200 kHz bandwidth, 600 kHz spacing, 320 kHz BLF, “Yes, M=4”, adaptive frequency agility, “Max. 2 Werp”. A portal profile proven in Europe transfers to India unchanged.
Commissioning order of operations, which is also the order to debug in:
- Trigger — GPI or motion, so the portal transmits when there is something to read.
- Population — this door’s real number.
- Session — S0 where population ÷ throughput stays under 0.5 s; S2 or S3 above it.
- Target — alternate A and B where tags make repeat passes.
- Select — deselect the out-of-scope class.
- Power and antenna — within the beamwidth pairing for that e.r.p., and note the receiver category it puts you in.
- Measure — first-pass read rate at real speed, changing one setting at a time.
Frequently asked questions
Why does my RFID portal read the same tag hundreds of times?
Because by default a reader reports every read, and the tag nearest the antenna is read most. Collapse the repeats with a periodic report duration set to the time items actually spend in the field: the published Modbus example uses 30 for items present about 30 seconds, after which “each tag is reported only once”. An RSSI post-filter tidies the report as well, while the air-time saving comes from the Select pre-filter.
Why does a portal read a tag on the way in but not on the way out?
The session flag is still at B from the inbound pass. Gen2 Table 6-21 gives S2 and S3 indefinite persistence while the tag is energized and “2 s < persistence” unpowered, and RAIN notes the real figure at room temperature “can be above 1 minute and even much longer for low temperatures”. Inventory in both directions by alternating the target A and B, or open every round with a Select that sets the flag back to A.
Which Gen2 session should a dock-door portal use?
Apply RAIN’s test: “if the tag volume divided by reader throughput is greater than 0.5 seconds, then the reader must use session S2 or S3 for reliability”. A 300-tag pallet at the 100 tags per second of RAIN’s passive-UHF example is 300 ÷ 100 = 3.0 s, six times the 500 ms S1 floor, so S2 or S3. S0 suits small populations of fast-moving tags such as conveyors and vehicle lanes.
What tag population should I set on a portal reader?
The real number for that door, declared per portal rather than globally. Defaults sit low: one shipped profile set uses 100 for Default, 300 for Dock Door with Motion Sensor and Transition Point, and 5 for Conveyor. The population drives Q, since Q ≈ log2(population) — 300 tags wants Q ≈ 8.23, whereas the reference Annex D loop starts at Qfp = 4.0, or 16 slots.
How do I stop a portal reading pallets in the next bay?
Five levers, cheapest first. Reduce e.r.p.; narrow the azimuth within the beamwidth limits of clause 4.3.4.3; shield the bay divider; pair neighbouring doors 1.2 MHz apart from the four channels centred at 865.7, 866.3, 866.9 and 867.5 MHz; and add a Select that deselects the out-of-scope class. Deduplication belongs upstream, on the reader or an edge service, so the warehouse system receives movements.
Does a wider antenna beam always give better portal coverage?
In the lower band, beamwidth is capped by power in the horizontal orientation: no restriction at or below 500 mW e.r.p., ≤ 180° above 500 mW to 1 W, ≤ 90° above 1 W to 2 W. Coverage therefore comes from matching beam to power. Because the limit applies horizontally, a narrow azimuth with a wide elevation pattern is the conforming way to cover full door height at 2 W, and a 100° panel belongs on a portal configured at or below 1 W.
How many read attempts does one forklift pass actually give me?
Compare antenna cycle time with time in zone. At a published 25 ms per antenna, four antennas make a 100 ms cycle. A forklift at 8 km/h is 2.22 m/s, so a 2 m zone gives 2 ÷ 2.22 = 0.90 s and 9 complete cycles. At 12 km/h through 1.5 m it is 0.45 s and 4 cycles. Keep per-antenna dwell at 25 ms to put all four antennas in the pass; at 500 ms the 2 s cycle means one antenna covers it.
Sources
- ETSI EN 302 208 V3.3.1 (2020-08), clauses 4.2.1, 4.2.2.1, 4.2.5 (Table 1b), 4.3.4.2, 4.3.4.3, 4.3.7.3, 4.4.1, 4.4.5.3 (Table 2a), 4.4.6, 4.5.1.3
- EPC Radio-Frequency Identity Generation-2 UHF RFID Standard, Release 3.0.1 (Feb 2026) — Table 6-21, clauses 6.3.2.2, 6.3.2.6.8, 6.3.2.10, 6.3.2.12.1.1, Annex D
- RAIN RFID System Design Guidelines V2 — sections 3.1.1–3.1.5 (session flags and persistence), 3.2.1 (RF fade control), 3.3 (session implementation examples), and Table 1 regional codes (EU8A, IN8A) with section 2.5.9
- Zebra FX Series RFID Fixed Reader Integration Guide — Reader Profiles and Table 8
- Zebra RFID Modbus TCP User Guide — Pre-Filter Config (41700), Post-Filter Config (43500), Trigger Config (43400), Reading Only Unique EPC Tags
- Barletta, Borgonovo, Cesana, “A formal proof of the optimal frame setting for Dynamic-Frame Aloha with known population size”, arXiv:1202.3914v2, 10 Mar 2013
- G.S.R. 853(E), 10th December 2021 — Use of Low Power Equipment in the Frequency Band 865-868 MHz for Short Range Devices (Exemption from Licence) Rules, 2021, Table-IV
- Department of Telecommunications (WPC) — 865-868 MHz short range devices exemption from licence