MVisionPro Engineering Library · fix
Why a code does not read, and what to check first
In short
Save one failed and one good frame from the same station with their exposure, gain, focus, speed and decoder recipe, changing one variable per test. Then compare them at identical settings: a directional trail along the travel direction points to motion blur, while a sharp, correctly framed capture points at the decoder, its timeout and the path the result takes. Stopping the line narrows the search rather than proving the cause.
The order of checks
The steps run from cheap geometric causes to the decoder; this is practice, not a norm.
- Framing and the quiet zone. A finder pattern (the structure that locates a 2D code) or a bar end touching the edge of the region of interest, the area the decoder searches, can mean the code is clipped; widen that area until the quiet zone, the clear margin around the symbol, fits inside. The margin is one module per side for Data Matrix and four for QR Code (GS1 and DENSO WAVE); GS1-128 asks ten module widths at each end, and other applications follow their own symbology specification.
- Pixels per module. Divide the symbol's pixel width by its module count; the module is its smallest cell or bar. Minima are engine-specific: Basler's Data Matrix Code Reader asks 3 px per module in Starter and 6 to 20 px in Basic, so check your decoder's figure before treating 3 to 5 px/module as a starting target (engineering synthesis, not a standard). If short, narrow the field or add pixels, then re-check that the whole code fits.
- Focus and motion. A directional trail is blur: shorten the effective image-forming time, the exposure under continuous light or the pulse length under pulsed light, and judge brightness, noise and module-edge contrast separately; gain amplifies signal and noise together, adds no photons and never removes blur (vendor guidance). Soft edges without a trail, where the nominal height reads and higher or lower parts fail, are focus: refocus on the code plane and shoot both extremes statically. Our depth-of-field estimate assumes a thin lens and a two-pixel circle of confusion, not proof of edge contrast (our calculator).
- Glare and illumination. A saturated patch that moves with the lamp or camera angle is glare: hold the exposure fixed and change only light geometry or polarisation, since reflective metal can read as black (vendor guidance). On a direct part mark, a code marked into the part itself, try one geometry at a time, judging by dot-to-substrate contrast: diffuse light wrapping the surface, dark field at a grazing angle, coaxial light along the lens axis, polarised light against specular return. That order is practice; ISO/IEC 29158:2025 defines evaluation conditions for such marks (normative).
- The mark itself. Scratches, voids, faded ink, a damaged clocking pattern (the cells that set the Data Matrix grid) or broken dots are physical and no setting repairs them, though some engines decode them anyway: ReadIDMax tolerates damaged quiet, finder and clocking patterns (vendor documentation). Compare a known-good symbol under the same optics before touching the recipe.
- Pose. When failures follow tilt, rotation or curvature rather than speed or height, present the code square, then add the pose back in steps. Cognex recommends staying inside 40 degrees of incidence when installing ReadIDMax, a setup recommendation rather than a decoding limit (vendor documentation).
- The decoder recipe. Decoder options are hypotheses, not a list to switch on. Enable the expected symbology, then change the one setting matching the failure: polarity for a light-on-dark code, damage mode for a damaged mark, your engine's perspective or grid mode for a deformed one, result count when only the first code returns, timeout when decoding stops early. Rerun the same frame after each change (vendor-specific settings).
Calculate for your case
These are inputs of the example, not typical values: 2448 px across a 160 mm field, a 0.30 mm module, 1200 mm/s and a known 100 µs exposure. Sampling is 2448 divided by 160, or 15.3 px/mm, so the module spans 4.59 px, and the trial exposure gives 1200 mm/s × 0.0001 s × 15.3 px/mm = 1.836 px of blur (calculated). For those 2448 px on 160 mm our calculator puts the one-pixel ceiling at 54.466 µs (calculated). The tool page fits a real lens to the request, so its numbers differ: a 160.5 × 134.2 mm field, 55 µs for its chosen pair and "at the minimum exposure time of 50 µs, calculated motion blur is 1.00 px". It has no field for an exposure already used, so multiply by hand, as the exposure article shows.
Common mistakes
- Reading and verifying differ: a decode says this frame decoded, while a grade comes from a calibrated method, ISO/IEC 15415:2024 for 2D symbols and ISO/IEC 29158:2025 for direct part marks (normative).
- The conveyor speed of 2.5 m/s and line frequency of 15 kHz on the MV-ID7080EM-35F-WHA V3.0 record are often read as a decode rate, which neither defines, so measure decodes per second on your codes (datasheet).
- A pixels-per-module figure does not transfer between decoders: 2.5, 3 and 6 px/module are limits of particular engines and versions, so look up the figure your engine states.
Next step
Send us the failed frame with its settings and the reader's part number, and we confirm what that variant's passport states for distance, field and speed.
Sources
- MVisionPro engineering calculator and Hikrobot catalog records (datasheet fields); calculations, the tool page and the public API were verified on 2026-09-19
- ISO/IEC 16022:2024 (Data Matrix symbology): https://www.iso.org/standard/80926.html (checked 2026-09-19)
- ISO/IEC 18004:2024 (QR Code symbology): https://www.iso.org/standard/83389.html (checked 2026-09-19)
- ISO/IEC 15417:2007 with Amendment 1:2026 (Code 128): https://www.iso.org/standard/43896.html, https://www.iso.org/standard/87124.html (checked 2026-09-19)
- ISO/IEC 15415:2024 (2D symbol print quality, measurement and grading): https://www.iso.org/standard/76876.html (checked 2026-09-19)
- ISO/IEC 29158:2025 (direct part mark quality, modifies the ISO/IEC 15415 method): https://www.iso.org/standard/87123.html (checked 2026-09-19)
- GS1 2D in retail implementation guidance (quiet zones: 1X Data Matrix, 4X QR Code): https://ref.gs1.org/guidelines/2d-in-retail/ (checked 2026-09-19)
- GS1 DataMatrix guideline (quiet zone one X-dimension on each of four sides): https://ref.gs1.org/guidelines/datamatrix/ (checked 2026-09-19)
- GS1 General Specifications 21.0.1 (GS1-128 quiet zone 10X left and right): https://ref.gs1.org/standards/genspecs/21.0.1/ (checked 2026-09-19)
- DENSO WAVE, QR Code margin of four modules on all sides: https://www.qrcode.com/en/howto/code.html (checked 2026-09-19)
- Basler Data Matrix Code Reader vTool, module size by software version: Starter at least 3 px/module, Basic 6-20 px/module: https://docs.baslerweb.com/data-matrix-code-reader-vtool (checked 2026-09-19)
- Cognex DataMan 503 scan map, 1.2 px/module 1D and 2.5 px/module 2D for that reader and lens configuration: https://docs.cognex.com/dmst_577SR5/web/EN/Fixed_Mount_Manual/Content/Topics/FMREF/DataMan503/DataMan503ScanMap25mmLens.htm (checked 2026-09-19)
- Cognex ReadIDMax reference, 40 degrees angle of incidence and 5 pixels/cell for that tool, plus symbology group, polarity, grid, damage, checksum, result count and timeout settings: https://docs.cognex.com/is_632/web/EN/ise/Content/Reference/ReadIDMax.htm (checked 2026-09-19)
- Basler, optimizing image quality: gain amplifies signal and noise together: https://docs.baslerweb.com/optimizing-image-quality (checked 2026-09-19)
- Cognex AcquireImage, exposure and gain controls: https://docs.cognex.com/isvidi_140/web/EN/Help_ISViDi/Content/Topics/Spreadsheet/VisionTools/AcquireImage.htm (checked 2026-09-19)
- KEYENCE code reader read-error FAQ: metal reflection interpreted as black makes the apparent quiet zone too narrow: https://www.keyence.com/ss/products/auto_id/codereader/code_verification/faq-read-error.jsp (checked 2026-09-19)
- Cognex, preventing no-reads with barcode testing, reader versus verifier: https://www.cognex.com/en-ca/blogs/barcode-verification/prevent-no-reads-with-barcode-testing (checked 2026-09-19)
Related
How this material was prepared
Prepared with MVisionPro AI agents from stated sources and the calculation core; MVisionPro retains editorial responsibility. A physical test or human engineering review is claimed only when explicitly stated. Read the editorial method.
Editorial status: verified. Content updated 2026-09-19.