A vision job judges one camera frame with an inspection recipe (.vrp) and reports OK, NG or no verdict. Results appear as system tags vision.<job>.*, can be written back to user tags (PLC), and NG images and a result log are kept on the gateway.
/COMPONENTS="vision"). Either way an app update does not remove it. Without it settings can be saved but nothing is inspected and the status shows “Vision engine not installed”. The license needs vision (unlimited) or vision:<n> (n jobs) to enable jobs.| Task | Role |
|---|---|
| See verdicts, counters and the last image; SCADA vision element | viewer |
| Run once, test one shot, pause and resume | operator |
| History (NG gallery, result log) and reading engine attributes | operator |
| Changing jobs and recipes, resetting counters, overrides, alarm suggestions | admin |
Upload a .vrp on the Recipes tab. The gateway test-loads it in the engine and keeps it only if that succeeds (32 MB each · 32 recipes and 128 MB on this device · 33 MB of versions carried in project bundles, which are limited to 48 MB). It is stored as the engine saves it after loading it once, so a downloaded file may differ in key order from the uploaded one. If the engine rejects it, the reason is shown in the screen language. Recipes travel with the project bundle. Only admins can download recipe contents.
_. Result tags are named vision.<id>.*.out.<name>. You never type the work UUID by hand. Work UUIDs are always stored in lower case: from vision engine r5 on, the engine reads the work IDs of a recipe in lower case. An older setup saved in upper case is rewritten once in lower case when the gateway starts, and it still runs with an older engine.reason=camera).overrun grows — measure the inspection time of the recipe on the device before choosing a short interval.overrun grows — set the interval equal to or longer than the camera interval.overrun (one waiting slot only).maxRtspCameras (1 to 64) in cameras.json in the config folder.Give an output a min and/or max and the result tag out.<name>.ok appears (1 = in range, 0 = out). A missing or non-numeric value counts as out of range. Verdict from decides what makes OK or NG.
| Verdict from | OK when |
|---|---|
| Engine verdict (default) | The engine says OK. Range results are informational |
| Output ranges only | Every ranged output is in range |
| Engine + output ranges | The engine says OK and every ranged output is in range |
When verdicts come from the engine, out-of-range marks in the result log are shown dimmed as “Reference — out of range” (they did not affect the verdict).
The recipe’s partial verdicts (JudgeLogics) appear as partial.0, partial.1 … (1 or 0, empty on no verdict).
Enumeration inputs (for example OCR spacing or read mode, code-reader match mode) can be overridden with vision engine r4 (C API level 4) or later. The list shows the candidates the engine currently holds (for a job that was saved and loaded), and the value is set by name. With an older engine they are listed as “pending” and saving is refused. For inputs that change the layout (the type selection of TypeConverter, CreateObject, ObjectAttribute, ArrayElementAccess), the engine refuses with “cannot change: output is connected” while the job’s outputs feed another job — disconnect in the recipe first. Re-selecting the current value is fine.
Use these to change an input such as a threshold without editing the recipe. In the job editor under Recipe input overrides, pick an input and enter a value; it is applied after the recipe loads. Number, boolean and text inputs, and enumeration inputs (engine r4 or later), can be overridden (not images, regions or coordinates).
Overrides do not change result tags, so they can be saved while polling. Saving applies the new values to that job only — other jobs are untouched, and if this job is inspecting, the values are applied after that inspection finishes (it is not cancelled). Removing an override reloads the recipe so the recipe value returns.
| Tag | Meaning |
|---|---|
result | ok, ng or none (no verdict — not NG) |
judgment | 1 or 0; quality uncertain on no verdict |
reason, error | Why there was no verdict (camera, timeout, cancelled …) |
count, okCount, ngCount, noneCount, overrun | Counters |
ngStreak | NGs in a row (0 after an OK; no verdict is skipped) |
latencyMs, runMs | Trigger to result, engine run time |
out.<name>, out.<name>.ok | Output value, range verdict |
partial.<i> | Partial verdicts |
det.* | Object detection results (chapter 20) — only recipes with an object detection work |
paused, state, busy | Paused, state, inspecting |
seq | Inspection number — changes last. When seq changes the whole result is in place |
Counters survive restarts. With Automatic counter reset they go to 0 when the gateway’s local time passes a boundary.
To reset by hand use Reset counters on the job card (admin).
Set a SCADA camera element’s source to Vision inspection result (vision:<job>) to show the last result image with a verdict band (top, bottom or none) and counters. The image is fetched only when the inspection number changes. It works on viewer kiosks.
ngStreak, critical) and latency over the job’s time limit (latencyMs, warning). An object detection job gets two more rules, for the target class count and for unusable detection results (chapter 20). Edit them on the alarm screen.vision.<job>.okCount and total vision.<job>.count.vision.run("job") (also vision.trigger) queues an inspection and returns at once. vision.last("job") returns the last result {result, judgment, seq, ts, outputs, …} or null. To wait for a result use on("vision.job.seq", …).arrays ({"<work ID>.out[<n>]": [numbers…]}); read them with vision.last("job").arrays, or draw them with a chart element's 'Draw a vision result array' in the screen editor, which redraws the whole array for each result. The histogram and line profile tools put their arrays in the result only when their array output input is on.vision_* tools (status, jobs, recipes, run, test, summary, image list, result log, pause, resume, read attributes, overrides).| Symptom | Check |
|---|---|
| Always no verdict, reason=camera | Whether the camera delivers frames (camera screen); that the wait after trigger is not too long |
| reason=timeout | The job’s time limit and how heavy the recipe is |
| overrun keeps rising | Triggers come faster than inspections — lengthen the interval or lighten the recipe |
| Job state “Error” | The error text on the job card (recipe load or override failed) |
| Triggers do nothing | Whether the job is paused (the “Paused” badge), license or trial run time |
| No more RTSP cameras can be added | The device's RTSP camera limit (6 on a CM4) — delete RTSP cameras you do not use (see the recommendations in section 5) |
The bundled sample Vision inspection line (Project › Samples) runs four inspection jobs on folder-playback cameras. It judges 26 synthetic images (3 OK and 3 NG for each of the first three jobs, 8 for the precision check) every 2 seconds and shows OK, NG, yield and the NG streak. It has two screens; switch with the Inspection · Precision check tabs in the header.
| Job | Image folder | OK when | Values on screen |
|---|---|---|---|
Part count count | vision-count | 6 parts on the tray (5 or 7 is NG) | Parts |
Area · stain area | vision-area | Plate area 83,500–89,500 px², stain ≤ 150 px² | Plate area · stain area |
Code reading code | vision-code | The label reads LOT-2026-001 | Code read · format |
Precision check precision | vision-flange | The part is found (alignment score 60 or more) and the bore is 9.85–10.15 mm | Alignment score · bore diameter · lot read (Precision check screen) — 16-1 |
Setup (admin, before opening)
vision-sample-images.zip (3.2 MB). It has four image folders (6 · 6 · 6 · 8 images) and a calibration practice folder (calibration/).vision_count, vision_area, vision_code, vision_flange, image folders vision-count, vision-area, vision-code, vision-flange, interval 2500 ms.PASS / FAIL on the result image is drawn into the image by the inspection engine, so it is always English regardless of the screen language. The verdict band and screen text follow the screen language.vision license feature, the screen still opens and each column shows Vision inspection feature not installed.The fourth job precision runs three tools on each plate part: Locate (alignment with a pattern model) → Bore (bore diameter) → Lot (lot code reading). The regions of Bore and Lot follow the position Locate found (their Align input takes the alignment result). The calibration of camera vision_flange (0.1 mm/pixel, made from a checkerboard image) is stored in the project, so the diameter is in mm.
The first recipe is taught only partly on purpose, for practice. The pattern model finds parts turned up to ±5° only, and the character model has no samples of 8.
| Image | Part | First recipe | After practice |
|---|---|---|---|
flange_01_ok_ref | Reference pose | OK | OK |
flange_02_ok_shift · 07_ok | Shifted part | OK | OK |
flange_03_ok_rot · 05_ok_rot | Part turned 11–12° | NG — not found (score about 31) | OK (①) |
flange_04_ng_big · 06_ng_small | Bore 10.42 · 9.62 mm | NG | NG |
flange_08_ok_lot8 | Lot 2610B08 | OK, lot read as 2610B0B | 2610B08 (③) |
Practice (admin · license vision-teach) — open the workbench from the job card › Adjust recipe and pick images from the folder-playback folder vision-flange as the image source. Section 17 describes each screen.
vision_flange: 10.02 mm, OK.2610B08 → (3) Add as samples → (4) Start training → (5) Read this image gives 2610B08. With about 90 samples training takes less than a second on a Mac.When all three are done, Publish a new version and pick precision in the dialog so the running job uses it. To go back to the start, roll back to the original version in Versions.
calibration/ holds the checkerboard image (5 mm squares) and the calibration file made from it, vision_flange.cal, for practising delete and upload on the Calibration tab. Deleting it reapplies the job without calibration: the diameter comes in pixels and every part fails.The bundled sample License plate recognition (Project › Samples) has one inspection job (plate) that reads 20 synthetic plate images; the project script plate-judge then matches the text read against a registered-vehicle list and sorts each plate into Registered · Unregistered · Read failed. The plates and numbers are entirely computer-drawn (the numbers are random) and may coincide with a real vehicle's number by chance. Do not use this for real vehicle reading or access control.
Setup (admin, before opening)
plate-sample-images.zip (0.3 MB). The plate-demo folder has 20 JPEG images; the zip also has the registered list and the typeface notice (SIL OFL 1.1).plate_cam, image folder plate-demo, interval 2500 ms. Upload the 20 images before saving the camera, using the Image folder panel at the bottom of the dialog (images added after saving take effect only when the camera is saved again).Judging rules (the inspection engine only knows whether text was read — the reference text is left empty)
| Step | Condition | Result |
|---|---|---|
| 1 | Inspection result is none (camera delay, timeout, ...) | Nothing is updated and the totals do not change |
| 2 | The engine could not read text (ng) | Read failed (no text could be read) |
| 3 | The text without spaces is not a plate format (2-3 digits + 1 Hangul letter + 4 digits) | Read failed (plate format does not match) |
| 4 | The text is in the registered list | Registered — the gate opens |
| 5 | Anything else | Unregistered — alert (plate-unreg) |
PLATE.REGISTRY (comma-separated, 15 vehicles). Change the tag value to change the list without editing the script. If it is empty when the sample is first opened, the script writes the default list.NNHNNNN|NNNHNNNN, Hangul cell width 1.0), so a Korean syllable without a final consonant (such as '가' in demo_08) that used to split into two pieces read as digits is kept as one character.PLATE.ALERT pulses for 2 seconds, so the alarm history gets raise/clear pairs. Reset the totals with the Reset totals button.vision license feature, the screen still opens and shows Vision inspection feature not installed.The bundled sample Parking entrance plate scene (Project › Samples) differs from 16-2: it looks at a whole entrance scene (1280×720), not a plate-only image. The recipe of the job gate has two tools — the plate finder (Finder) finds the plate in the scene and passes that area to the text reading tool (Plate) as its inspection area. Car position, plate size (0.8–1.15×), tilt (±5°) and brightness change from scene to scene. The script gate-judge sorts the result into registered · unregistered · read failed with the rules of 16-2, and a scene with no plate found becomes No car (not counted, no alert). Scenes, plates and numbers are all synthetic and cannot be used for real vehicle or site reading.
Setup (admin, before opening)
plate-scene-images.zip (3.9 MB). The gate-scene folder has 28 scenes (24 cars · 4 empty lanes); the zip also has the registered list (18 vehicles) and the typeface notice.gate_cam (image folder gate-scene, interval 2500 ms) and upload the 28 images before saving it.NNHNNNN|NNNHNNNN). On 200 synthetic scenes not used by the sample it read 194 correctly and 6 failed; no plate was misread as another valid number.The bundled sample Conveyor object counting (Project › Samples) runs one synthetic conveyor video (8 boxes moving left to right at 160 px/s, a lap of about 38 s) side by side as three folders at 2, 5 and 10 frames per second. The recipes of the three jobs (c2 · c5 · c10) have the same shape — text reading (Label, first) · motion region (Motion) · object tracking (Track) — and the screen shows, per job, the counts (A→B · B→A · total) · last lap / this lap · recent crossings (ID · label read) · median time per frame · learning. The video is synthetic and cannot be used for real site counting.
Setup (admin, before opening)
conveyor-sample-images.zip (21 MB). Three folders: conveyor-2fps (76 images) · conveyor-5fps (190) · conveyor-10fps (380) — images × interval is 38.0 s in all three, so the three scenes stay in step however long they run.conv2_cam · conv5_cam · conv10_cam, image folders of the same names, intervals 500 · 200 · 100 ms. Upload the images of each before saving it.track.*) and the recent crossings collected by the script conveyor-events. The result tags hold only the last crossing, so when two objects cross in the same frame the list shows one of them (the counts include both).A workbench for tuning a recipe's thresholds and choices by running it on images. It runs on a separate engine, so running inspections do not change until you save as job overrides or publish and apply to a job. Administrators only; the license must include the vision-teach feature (it does not open on a trial license).
Ways in
Image source — choose one of five under Image source: one camera frame now · a folder playback image · a file upload (JPEG or PNG, 8 MB) · an NG image from the inspection log · a test set image. Log images are usually overlays with results drawn on them, so verdicts re-run on them are for reference only. Turn on Also keep NG originals under Job edit › Result images to keep the camera original next to each NG overlay; that original is used instead (same size limit).
Screen
| Area | What it does |
|---|---|
| Tools (left) | The recipe's tools in order with OK/NG and time per tool, plus the overall and partial verdicts. Click one to highlight its region on the canvas. |
| Canvas (centre) | The image at full resolution. Zoom with the wheel or two fingers, drag to pan, Fit and 1:1. Switch the overlay between Vector (green OK · red NG · dashed = not run yet or reference position, in the screen language) and Engine drawing (drawn by the engine — text in English). |
| Properties (right) | Inputs of the selected tool. Numbers, true/false, text, enums and inspection regions (rectangle, rotated rectangle, circle, ring, arrow) can be changed. Edit a region by dragging its handles on the canvas (inside = move, edges and corners = size, the circle on top = rotate) or by typing in the number fields. If the tool does not accept a shape, the reason is shown. Polygons and connected inputs are view only. Connected inputs show their source. A changed input gets a Recipe value button. Outputs of the last run are listed below. |
With Auto preview on, every change runs once shortly afterwards. With it off, press Run.
Test sets — under Test sets, collect OK and NG images (100 per set, 200 MB in total) and run them all at once. Load expectations with Import expectations from an expected.json (image name → judgment OK/NG and outputs with {"eq": value} or {"min": a, "max": b}, keyed tool name.output name). Results show the adjusted and opening values side by side with matches, false accepts, false rejects and changed verdicts. Use Mismatches only, Download CSV and To canvas (use that image). Test sets stay on the gateway but are not stored in project bundles (.acproj).
Saving — Save as job overrides stores the current adjustments as input overrides of a job that uses the same recipe. Inputs set back to the recipe value are removed from the overrides. Running inspections use them from the next inspection. Region changes are not kept as overrides — publish them.
Publish — Publish in the header stores the current adjustments and regions as a new version of the recipe (as the engine saves it, with a note). Versions never change; only the jobs you pick in the dialog use the new one. For the job the session was opened from, clear input overrides is on by default (those values are already in the new version). Other jobs' overrides are not in the new version, so you pick them one by one. Publishing content identical to an older version makes that version the published one again instead of creating a new one. The Publish button is off when the engine version cannot save recipes. Publishing and applying are refused while polling.
Versions — Versions on the Recipes tab lists a lineage (published and past versions), compares a past version with the published one (changed values, connections, tool names, judgment logic) and rolls back a job to an older version. The first uploaded original version is always kept; besides it, up to 3 unused past versions are kept per lineage (oldest removed first). Project bundles carry only versions used by jobs and published versions — original and past versions stay on this gateway and do not move with the project to another device (there the carried version looks like the first of a new lineage, and a missing previous version does not break anything). When this device exceeds 128 MB, unused past versions are removed first; if that is not enough, publishing and uploading are refused. The workbench header and the publish dialog show the remaining room.
Undo and drafts — Undo and Redo in the header (Ctrl+Z · Ctrl+Shift+Z) step back through value and region changes (100 steps per session). A changed session is autosaved as a draft every 30 seconds ("Autosaved" time in the header) and kept when the session closes or times out. When you open it again you are asked whether to resume the draft or discard it and open the published version. If the draft started from another version, that version number is shown and resuming opens the draft's version (without job overrides). Drafts are not stored in project bundles. Only one person can edit a recipe (lineage) at a time.
Auto set, work names, intermediate images, diagnosis (vision engine r6 or later)
The bar under the workbench header shows Master image: W×H or none, with Use current image and Remove. It puts the current session image into the recipe as its reference image.
With a calibration loaded, measuring tools such as diameter, length, angle and area give values in the calibration's unit (usually mm) instead of pixels. There is one calibration file per camera, kept apart from the recipe.
Upload — on the Calibration tab of the Vision page, press Upload (or Replace) in the camera row → Choose calibration file → width · height (empty uses the source image size stored in the file, 0 turns the size check off) · note → Upload. The gateway reads it with the inspection feature before storing it and reapplies the jobs using that camera ("jobs reapplied n · failed f"). Delete reapplies those jobs without calibration. Download returns the stored file as is.
Choosing on the workbench — the bar under the header shows Calibration: <camera> or No calibration, with Choose. With the image source camera, current image, that camera's calibration is loaded by itself. Folder playback, file, history and test set images start with No calibration: press Choose and pick the camera in Choose session calibration. Switching to another such image goes back to no calibration, so choose again. A calibration chosen in the session does not change the calibration of running jobs. When the file changes on the Calibration tab, the bar shows "(calibration file changed — reloaded with the next camera image)".
Tools with a pattern model input, such as alignment, show Pattern model present (or No pattern model (not taught yet)) and a Teach button in the model row of the properties panel. It is enabled once there is a session image.
The model row of a character reading tool shows n samples and a Character training button. The Character reading training dialog has five steps.
NNHNNNN|NNNHNNNN) options appear. Both are off by default, and a recipe with one on cannot be used on older devices that lack it. All samples of a model use one cutting setting, so the settings are locked once samples exist (remove all samples to change them).Training time and progress — before starting, "n samples · about t on this device · about m MiB of memory" is shown, and training does not start when free memory is short (Linux devices). While training, "p % · elapsed / about t" and the phase (making features, fitting, cross validation) are shown; progress is a share of the estimated time, so it moves with the elapsed time. Training continues when the dialog is closed, and "Character training p %" stays in the bar. Cancel training leaves samples and model unchanged. Each gateway trains one model at a time.
Protecting running inspections — training runs on the same gateway as the running inspections. It first measures their normal time ("Measuring the running inspections first"), and when they slow down during training it stops and later starts again from the beginning (3 automatic restarts). After those, press Resume now. If it still cannot finish, there are three ways:
Keep samples (8 MiB) — with keep samples on, the samples stay in the recipe after training, so more samples can be added and trained later. Off makes the recipe smaller, but that recipe cannot be trained again. Keep samples is on by default when the expected recipe is 8 MiB or less, and off by default above that — export the samples first before turning it off. Training is refused when the recipe with kept samples would exceed 32 MiB.
| Message | What to do |
|---|---|
| No session image — choose an image source first | Pick an image in Image source in the header. |
| A teaching setting is wrong or the region is missing; the model is unchanged | Check that a region is drawn and the settings are in range. |
| The pattern model could not be taught; the model is unchanged | Check that the region has edges and lies inside the image. Try a lower edge threshold. |
| Teaching the model took longer than 30 seconds and stopped | Make the region smaller or raise the pyramid level. |
| Could not cut the characters: none were found, or the region is empty or outside the image | Adjust the text region, binarization offset and bright background. |
| The number of characters differs from the number of boxes | Type one character per box (a space skips a box). |
| The characters are in decomposed form (conjoining jamo or combining marks) | Type them again as precomposed characters. |
| The cutting settings differ from this model's samples | Keep the samples' settings, or remove all samples before changing them. |
| Training needs at least two different characters | Add samples of another character. |
| Keeping the samples would make the recipe exceed 32 MiB | Turn off keep samples (export first) or use fewer samples. |
| Another character training is running on this gateway; only one runs at a time | Try again after it ends or is cancelled. |
| Not enough free memory to train | Use fewer samples, or train on another gateway and upload the recipe. |
| Not a calibration file; the current calibration is unchanged | Check that the file is a calibration saved by the inspection feature. |
| Calibrations exceed 16 MiB in total | Delete calibrations of cameras no longer used. |
| The recipe would exceed 32 MiB; it was reverted | Remove the master image or turn off keep samples. |
When the recipe has a motion region or object tracking (vision inspection r15 or later) the job is the frame stream of one camera: each trigger puts one frame in, in order; the background is learned and objects are numbered and followed. Use a fixed camera and an interval trigger.
learning and 'Learning' on the job card show it.settling) with learning true. The base of the engine counts follows meanwhile, so after settling only the increase is counted. Block the cause first with majority warm-up in the recipe (r18), and use settling as a guard where majority warm-up cannot help — a belt crowded over half the view, or objects standing still while learning (objects passing meanwhile are not counted). On a line where objects keep coming, set it longer than the time for one empty gap to pass. Objects that passed while settling are not counted, so the totals can be short by that many.WarmupMajority in the recipe, off by default) — when on, during the warm-up frames each pixel learns the value it showed most often as background. Objects passing during learning are not learned, so a stream that starts or resumes while objects pass leaves no ghost areas (the cause the settling above guards against). An object that stays in one place for more than half the learning time (slow or stopped) can become background, so set the warm-up frames longer than twice the time an object takes to pass one spot (4 s in the conveyor sample). It is less accurate when objects cover over half the view or the picture shakes. Off learns by averaging as before and is not written to the recipe — a recipe with it on does not open on a device with r17 or earlier. Turn settling on as well only where majority warm-up is not enough (settling ends only when an empty frame comes, so in a scene that always shows objects that time stays uncounted).track.countAtoB, track.countBtoA, track.countTotal (cumulative, following the counter reset of section 9) and track.active (objects now tracked). Counts carry on when learning starts over.track.lastId, track.lastDir (1 A→B, 2 B→A), track.lastText, track.lastTs, the inspection history and the job card. Also record in the event log is off by default — when on, up to 30 a minute per job are recorded and the rest reported in one line (it writes a lot to the event log).track.lastText and the inspection history. The OCR work's image input must be the inspection image (it cannot read when connected to a preprocessing output). Its search ROI may be connected (the object regions are passed separately). Reading stays within the inspection time limit and the per-frame number.CharScores and Score. With the job's OCR minimum score on (default 0 = off), an OK inspection scoring below it gives no verdict (reason 'read uncertain', verdict and output tags uncertain — alarms neither raise nor clear, PLC result writes follow the no-verdict value rule, the result picture is kept by the original OK verdict). An NG (engine NG or out of range) stays NG even with a low score. Also per-object reading gives a best read below it as 'read uncertain' (track.lastText uncertain; the PLC result write gets an empty text — or the no-verdict value if set — so the previous object's text does not stay). Unknown (−1) is not filtered. Set the value on site — look up the scores of a few correct and wrong reads from the real camera in the inspection history and put it between them. Synthetic text mostly scores in the 900s, but real text and Hangul can score much lower even when read correctly (in the synthetic number plate test, correctly read plates scored 28–954). Compare scores within one model only — training again changes the score of the same image.When the recipe has a Sharpness work (vision inspection r24 or later), use Focus check in the job card's more menu (operator or above) to focus the lens. It reads only the sharpness work values from one camera frame and receives no picture; counters, result tags, PLC result writes and inspection records do not change. The job state conditions are the same as for a test shot.
| State | Meaning |
|---|---|
| Not measured | No value yet (including failed reads) |
| Measured | A value was measured |
| Flat | The region has no pixels to measure focus on. Move the region to an area with texture or edges. |
When the recipe has no sharpness work, or the camera or inspection fails, the bar area stays empty and the reason is shown.
Not a safety function — Object detection is not a certified safety function. Do not use it as the only means of protecting people or equipment. Detection results vary with lighting, camera angle and the model, and objects can be missed or wrongly detected.
When a recipe has an object detection work, its results appear as result tags vision.<job>.det.*. With several object detection works, the first one in the recipe is used. Boxes (positions) are not tags — they are drawn on the result image and feed object tracking.
| Tag | Meaning |
|---|---|
det.isResult | 1 or 0 — 1 when the target class count is within the minimum and maximum count |
det.count | Boxes of the filtered classes |
det.targetCount | Boxes of the target class |
det.maxScore | Highest score (per mille, 0 to 1000) |
det.classes, det.scores | Class number and score (per mille) of each box, highest score first — JSON array text |
det.classCounts | Boxes per class number — JSON array text |
det.valid | 1 or 0 — 1 when this inspection’s detection values can be used. 0 with no verdict, a detection work error or a detection work skipped in Run (always has a value, so use it for alarms) |
detector_error). It is not OK even when the judgment is “NOT detection work” or the detection work is not in the judgment, and it is not counted as NG either. As with any no-verdict result, result is none, judgment and output tags are uncertain, verdict fields of PLC result writes such as ok and ng write only rows with a no-verdict value, and NG in a row (ngStreak) neither breaks nor grows — so an NG-in-a-row alarm cannot catch detection errors. Catch detection errors, a missing model and a lost camera with an alarm for det.valid below 1 (Suggest alarms on the job card creates it). The inspection history keeps the engine verdict separately.det.* tag is uncertain (no value) and det.valid is 0. On an error the inspection reports a count of 0, but that 0 is not published as “no objects”. Uncertain tags do not raise alarms, so keep an alarm for det.valid below 1 as well.det.isResult, det.count, det.targetCount, det.maxScore and det.valid can be write sources (arrays are not written). When the value is unknown, only rows with a no-verdict value write that value; other rows write nothing (the PLC keeps the previous value). A no-verdict value such as −1, or writing det.valid (always 1 or 0) as well, lets the PLC tell “unknown” apart.det.targetCount of 1 or more, warning) and detection results not usable (det.valid below 1 — model missing, camera lost or error, critical). Putting an alarm on a detection result tag, or adding a PLC result write to a detection job, opens a dialog to confirm the notice above.vision.detector.link) and the event log record it, and the job card always shows “Detection results feed alarms or PLC”.