Resolving Ignition Easy Chart Pens in UDT Popup Windows

James Nishida8 min read
HMI / SCADAOther ManufacturerTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

A Vision popup that receives a UDT instance as a parameter and drives an Easy Chart pen through a Cell Update binding on Meta:TagPath will draw nothing unless four things hold at runtime. The parameter must reach the popup. The pen row must already exist. The string written into the tag-path cell must match the path format the chart expects. The member must have history enabled and data inside the chart's date range. The Easy Chart does not raise an error for a pen it cannot resolve, so run the checks below in order and gate each one on a confirmed reading before moving on.

Why the Easy Chart fails silently while the Basic Chart works

The Easy Chart builds its history query from the rows of its Tag Pens dataset. Each row carries a tag path string. When the popup opens, the Cell Update binding overwrites that string with whatever the bound property evaluates to. If the result is not a valid historical tag path, the chart queries nothing and returns nothing. It shows no overlay and writes nothing to the status bar. Common bad results include a missing provider prefix, a missing member name, a doubled slash, the design-time default, or a row index that does not exist.

A Basic Chart fed by a Tag History binding with an indirect path usually works in the same popup. The indirect binding composes the full path explicitly and shows its result in the binding editor. That is why switching chart types appears to fix the problem. The Easy Chart can be fixed the same way once the written string is corrected.

Observed at runtime Likely cause Check
Chart empty, pen legend shows the design-time name Cell Update targets a row that does not exist, or the binding never fired Check 2
Legend shows the pen, no trace Resolved path is malformed or lacks the member name Check 3
Path identical to a working pen, still no trace History disabled on the member, or no data in the date range Check 4
Works in one popup instance, not another Parameter passed as a string in one case and as a UDT in the other Check 1

Check 1: UDT parameter arriving at the popup root container

Prerequisite: the popup's root container has a custom property of the UDT type. The button or script that opens the popup passes the instance into that property.

  1. Drop a temporary Label on the popup. Bind its text to the same Meta:TagPath property the Cell Update uses.
  2. Open the popup from its calling window in Preview mode or in a launched client. Opening the popup directly in the Designer only shows the design-time default value.
  3. Read the label.
    • Shows the path of the clicked instance: the parameter arrives. Go to Check 2.
    • Shows the design-time instance for every button: the calling side does not pass the parameter. The property name in the open call or navigation action must match the root container property name exactly, case included. Fix that and repeat this check.
    • Blank or error overlay: the parameter is typed as a String rather than the UDT. A String property has no Meta:TagPath. Either change the property type or build the pen path from the string directly.

Check 2: Pen row existence and Cell Update target

A Cell Update binding modifies an existing cell. It cannot add a row. If the Tag Pens dataset is empty at design time, the binding has nothing to write into.

  1. In the Designer, select the Easy Chart and open the Tag Pens dataset in the property editor. Confirm at least one row exists for each pen you intend to drive.
  2. If the dataset is empty, drag one member of a concrete UDT instance from the Tag Browser onto the chart. This creates a correctly formatted row with sensible defaults for axis, color, and enabled state.
  3. Open the Cell Update binding. Confirm the row index points at that row and the column is the tag-path column, not the pen name column.
  4. Confirm the pen row is enabled and not hidden in the same dataset.

Gate: the row exists and the binding targets its tag-path cell. Go to Check 3.

Check 3: Resolved tag path against a known-good pen path

This check decides most cases. The row created by dragging a concrete member in Check 2 contains the exact path format the chart accepts. Compare the runtime string against it character by character.

  1. Before binding anything, copy the tag-path cell value from the dragged pen row. This is your reference format.
  2. Add a temporary Table component to the popup. Bind its Data property to the Easy Chart's Tag Pens property.
  3. Open the popup from the calling window again and read the tag-path cell in the table.
  4. Compare against the reference.
Difference from reference Correction
Provider in square brackets missing at the front Prepend the provider exactly as it appears in the reference
Ends at the instance folder, no member name Append / plus the member name; Meta:TagPath returns the instance path, not a member
Double slash between instance and member Remove the extra separator from the concatenation
Still the design-time instance The binding reads a property other than the popup parameter; re-point it
Braces or property path visible as literal text The property reference syntax is broken; re-select the property with the browse button in the binding editor

If the runtime string matches the reference format exactly and the chart is still empty, go to Check 4.

Check 4: History configuration and chart date range

A correctly formed path still plots nothing if the historian holds no data for it in the window being queried.

  1. Open the UDT definition, not the instance, and confirm history is enabled on the member being charted. History set only on one instance does not carry to the others.
  2. Drag that same member from a second concrete instance onto a scratch Easy Chart in the Designer. If it plots, history is working and the fault is the popup path. Return to Check 3.
  3. If the scratch chart is also empty, the member has no stored history. Enable history in the definition, confirm the history provider and database connection are healthy in the Gateway status pages, and wait for samples to accumulate.
  4. Confirm the popup chart is in Historical mode and its start and end dates cover a period when the member was logging. A popup that inherits a stale fixed date range queries an empty window.

Binding the pen path and confirming the trace

Prerequisites: Check 1 shows the correct instance, Check 2 shows a pen row exists, and Check 4 shows the scratch chart plots the member.

  1. Open the Cell Update binding on the Easy Chart's Tag Pens property.
  2. Set the row to the pen row and the column to the tag-path column.
  3. Enter the value as the reference path with the instance portion replaced by the property reference. Match the reference exactly for provider prefix and separators. The names below are placeholders: substitute your root container property and member name.
    // Value for the tag-path cell of pen row 0
    // UdtParam = root container UDT property, Level = member name (placeholders)
    {Root Container.UdtParam.Meta:TagPath}/Level
    Add the provider prefix in front of the reference if Check 3 showed the reference carries one and Meta:TagPath does not.
  4. Repeat for each pen row, one Cell Update entry per row.
  5. Leave the temporary Table in place. Open the popup from the calling window for the first instance. Confirm the tag-path cell matches the reference format and that the trace draws.
  6. Close the popup and open it from a second instance's button. Confirm the tag-path cell changes to the second instance and the trace redraws with that instance's data. This rules out a binding that only resolves the design-time default.
  7. Open two popup instances side by side if the popup allows multiple instances. Confirm each chart shows its own member. This proves the path resolves per window rather than from a shared client tag.
  8. Remove the temporary Label and Table, save, and repeat step 6 in a launched client. The chart must plot the passed instance's member within one refresh of opening.

FAQ

Why does my Ignition Easy Chart show no data in a popup but works on the main window?

On the main window the pen path is usually hard-coded from a drag-and-drop. In the popup, a Cell Update binding rewrites it from the UDT parameter. Bind a temporary Table to the Tag Pens property and compare the runtime tag-path cell with a dragged reference pen; a missing provider prefix or member name is the usual difference.

Why does Meta:TagPath not plot anything on its own?

Meta:TagPath returns the path of the UDT instance, which is a folder, not a historized value. Append a slash and the member name so the pen points at a tag with history enabled.

Why does the Cell Update binding change nothing on the Easy Chart?

A Cell Update binding only edits existing cells. It cannot add rows to an empty Tag Pens dataset. Drag a concrete member onto the chart at design time to create the row, then point the binding at that row's tag-path column.

Why does the Basic Chart work with the same UDT parameter when the Easy Chart does not?

A Tag History binding with an indirect path builds and displays the full path in its binding editor, so formatting errors are visible. The Easy Chart takes whatever string lands in its pen dataset and fails silently if it is wrong. Correct that string and both charts behave the same.

How do I test a UDT parameter popup in the Ignition Designer?

Open the popup from its calling window in Preview mode or from a launched client, never by opening the popup directly. Opening it directly leaves the root container property at its design-time default. Confirm with a temporary Label bound to Meta:TagPath that it shows the clicked instance.

Back to blog