Input on ways of auditing/handling (PanelView) HMI setpoint changes

I have a customer specified project of auditing HMI machine set point changes, from several different Panel View operator interfaces. The values themselves are in PLC tags, written to/read from the Panel View. I'd rather not modify the Panel View program(s) and keep functionality in Ignition if I can. The deviations are variable, could change, so I can't store as constants in the PanelView program.

The auditing to do: Do not allow setpoint changes beyond a min and max deviation, which could vary per different setpoint value... (min / max both of 10, can't change setpoint of 100 past 110 or below 90)

Currently I am starting using a Client Tag Change Event(s), evaluating which tag it is, reading the deviations allowed, (based on the tag path as a key), and evaluating newValue against previousValue.value and the deviation allowed. If it's not allowed, then I write the OldVal back to the tag (writeBlocking). This obviously fires the tag change event again, so I am looking to combat this by saving the last valid value, comparing and not doing the deviation comparison and tag write infinite times (ending recursion :slight_smile: ).
I'm just getting started and looking for the best way programmatically, as I might not be seeing or missing something. Is there a way of stopping or resetting the change in a tag change event, probably not since the change is already done I assume? Thanks much as always.

These won't run without a Vision client open. Any changes on the PV while Vision is closed will escape your scrutiny.

Consider writing a gateway timer event that simply checks everything on a repeating basis.

I feel this type of setpoint limiting should be handled in the PLC, not just the SCADA/HMI. Depends on what they're controlling

3 Likes

Yes, these are various equipment setpoints for aluminum extrusion heating/handling as part of that process.

This, of course, relies on you being able to read the recipe setpoint and not just the current setpoint. Otherwise I could change from 100°C to 108°C to 116°C to 124°C without exceeding the ±10°C deviation limit in any one adjustment.

Yes, good point. The prospect had been brought up with the customer, that of the 'creep' of values, and exactly, to compare to original recipe.

Where are the recipes stored?

In a SQL Server (Express) database, accessed as a configured database connection in Ignition.

That should make it relatively easy then. Retrieve the recipe as a dataset using a named query binding on a session custom property with the recipe ID as a query parameter.

You can set the numeric entry field upper and lower limits with expression bindings to the recipe parameters. I'd be inclined to set the deviation limits as session properties too (or as a tag dataset) so that you can adjust these without having to edit every expression binding. You could set them up in a dataset similar to the recipe so that the recipe and parameter limits correspond to make scripting / binding easier.