---
title: "Checks in Problems"
---

# Checks in Problems

The DCS module's checks of open DeltaV exports in Problems: duplicate tags, paths, overrides, sequences, batch, alarm limits and scales, expressions and the site's naming rules.

**Verification state:** modelled. On the real DeltaV 14.5.1 export, all checks together gave 110 information findings, each checked by hand, and no errors, in 1.3 to 1.6 s. Errors planted in that text were found, and only those. The false positive rate on other databases is unknown, and whether DeltaV rejects what the expression checks report is not known. Not seen in the running Editor; not on Windows.

## When exports are checked

Every open `.fhx` export is checked when it opens and 300 ms after typing stops. Findings appear in Problems at their place, with source "our check". Markers go when the file closes and when the environment stops. Exports that are not open are not checked.

Large exports (2 million characters or more) are checked in a background worker, so the window stays responsive: on the real export, no task of the window took over 50 ms after an edit. If the worker cannot start or does not answer in 10 s, the check runs on the window's thread and this is logged once.

## The checks

| Check | Severity |
|---|---|
| A tag used by more than one module | Error, on each |
| Two function blocks or two parameters with one name in a module | Error, on each |
| Text the reader cannot read | Error, where the reader stopped |
| A module class or area the export does not define (only in an export that defines classes or areas) | Information |
| In a sequential function chart: a connection to a missing step or transition, a missing initial step | Error |
| A step no connection reaches from the initial step | Information |
| In a function block diagram: a wire end the diagram does not have | Error |
| Batch: a class, phase class or process cell named but not defined | Information |
| A module path naming a module the export does not have (in an export that defines areas; aliases, paths from the module itself, I/O paths and units are left alone) | Information |
| A path whose next part names nothing its module or class has | Error |
| An instance overriding a parameter its class does not declare | Error |
| Alarm limits out of order within a block (high-high below high, high below low, low-low above low) | Information |
| A scale or range whose high end is not above its low end; an alarm limit outside the scale of the parameter it watches | Information |
| Inside expressions: unbalanced parentheses, an unclosed quoted path or `(*` comment, IF, WHILE, FOR or REPEAT without its end, or an end without its block | Error |
| A tag or class name that does not match the site's naming rule | Information |

Rules are placed on a value the owner writes, so a class's mistake is reported once, and an instance's `AI1$...` names are resolved through its class's exposed parameters. Inside expressions, `(* *)` comments, `REM` lines, strings and paths are skipped, and IF closes with `ENDIF` or `END_IF`. A missing module on a `//X/OUT` path is not reported, since it may be a device output. Units of connected blocks are not compared: the export does not say which scale a block input is in.

## The site's naming rules

| Setting | Meaning |
|---|---|
| `neuralInverse.dcs.naming.moduleTag` | A regular expression a whole module tag must match, for example `\d{3}[A-Z]{2,4}\d{3}[A-Z]?` |
| `neuralInverse.dcs.naming.moduleClass` | A regular expression a whole module class name must match |

Empty means no rule. A rule that is not a valid regular expression is logged in **Output > DCS** and not applied. Changing a rule checks the open exports again.
