Smart.RecipePanel is the control an operator uses to change what the line is making.

A recipe is a named set of values — “Product A” is 180 °C and 42 bar — and loading one writes them all in a single action, instead of typing six numbers into six fields and getting the fifth wrong. The values are listed with the names an operator knows and the units they are in, so the person pressing Load can read what is about to happen to the plant.

Choosing a product

Pick a recipe to see what loading it would write. confirm is on by default, so a load names the values first — a recipe that moves six setpoints at once deserves that.

The panel raises recipeApply; this page does the writing and hands back a result.

It never writes

Loading raises recipeApply and the host performs the writes — through the station, which refuses a tag that is not writable and records who asked — then sets result. The element cannot know who is pressing the button or how the writes should be audited, so it does not pretend to. A load that half-succeeds says so: the entries the plant refused stay struck through in the values table.

Read-only

readOnly removes the button rather than disabling it: a control that cannot be used should not invite a press. An operator with view rights still reads what each product is.