EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026 Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
<== Date ==> <== Thread ==>

Subject: Phoebus 4.7 — `lsi`/`lso` long strings, `.$` PV names, and macro “not fully resolved” warnings
From: "Gofron, Kaz via Tech-talk" <tech-talk at aps.anl.gov>
To: "tech-talk at aps.anl.gov" <tech-talk at aps.anl.gov>
Cc: "kgofron at comcast.net" <kgofron at comcast.net>, "Gofron, Kaz" <gofronkj at ornl.gov>
Date: Tue, 9 Jun 2026 02:26:48 +0000
# EPICS Phoebus 4.7 and `lsi`/`lso` `.$` PV names

**Subject:** Phoebus 4.7 — `lsi`/`lso` long strings, `.$` PV names, and macro “not fully resolved” warnings

---

Hello,

I am wiring a PyDevice IOC for TAS scan plotting (Phoebus OPI + `lsi`/`lso` path PVs) and hit a mismatch between **EPICS long-string CA access** and **Phoebus Display Builder macro resolution** in Phoebus **4.7.4-SNAPSHOT**. I would like to confirm the recommended pattern for **editable** full file paths in Phoebus.

## EPICS / CA side (works as documented)

For `lsi`/`lso` with `SIZV` > 40:

- Plain `caget TAS:Plot:SelectedFile` returns only the first **40 characters** (`DBR_STRING`).
- Full path works with the long-string modifier, e.g.
`caget -S TAS:Plot:SelectedFile.$`
or `caget -S TAS:Plot:SelectedFile.VAL$`.

Phoebus widgets need **`format=String`** (format 6) on textentry/textupdate. That part is clear from prior tech-talk threads and SNS training material.

## Phoebus 4.7 issue: `.$` in `pv_name`

Binding the OPI to `$(P)SelectedFile.$` (or `FullFileName_RBV.$`, `ColHeaders_RBV.$`, etc.) **works at runtime** after the display connects — full paths display, FileSelector browse loads data, plot updates.

On **every screen reload**, however, the Phoebus terminal logs warnings such as:

```
Widget 'SelectedFile' (textentry) 'pv_name' is not fully resolved: 'TAS:Plot:SelectedFile.$'
Widget 'GraphData' ... pv0 '$(P)ColHeaders_RBV.$' is not fully resolved: TAS:Plot:ColHeaders_RBV.$
```

Widgets can show a **magenta border** until a PV connects; the border often clears after browse/select.

I traced this to Phoebus macro handling: after `$(P)` expands, the resolved name still contains a literal `$`. `MacroHandler.containsMacros()` treats **any** `$` as an unresolved macro (`indexOf('$') >= 0`). So `TAS:Plot:SelectedFile.$` is flagged even though it is a valid EPICS channel name, not a Phoebus macro.

## Workarounds we tried

| Approach | Result |
|----------|--------|
| `$(P)SelectedFile.$` with `format=String` | Works at runtime; load warnings remain |
| `ca://$(P)SelectedFile.VAL$` | Same — still contains `$` |
| Display macro `LONGSTR=.$` → `$(P)SelectedFile$(LONGSTR)` | **Fails** — macro value `.$` triggers `Incomplete macro expansion LONGSTR='.$'` |
| `{"longString":true}` modifier | Avoids `$` in the name, but default `pv_name_patches` strips it; unclear if that restores full-length CA reads for `lso` |

## Current workaround: CHAR waveform PVs (pcaspy style)

We followed the **pcaspy** / `plotData.bob` pattern: `waveform` with `FTVL=CHAR`, Phoebus `pv_name` without `$`, `format=String`:

- `SelectedFilePath`, `FullFileNameText`, `ColHeadersText`, `CommandText`, `DataFileText`

This **removes all Phoebus load warnings** and readback/display work well.

**Open problem:** `SelectedFilePath` is **not yet writable from the Phoebus File textentry** (browse via FileSelector and plot reload otherwise work). We use PyDevice `INP` with `('VAL', 'TPRO')` on the waveform record; Python `set_selected_file()` runs in unit tests but screen writes do not reach the IOC the same way `lso` `OUT` does.

Legacy `lso SelectedFile` + `caput -S ….$` still works from the shell.

## Questions for the community

1. What is the **supported Phoebus 4.7** `pv_name` for an **editable** `lso`/`lsi` path field (full read/write, no load warnings)?
2. Are the `not fully resolved` warnings for `.$` **expected/harmless**, or is there a preferred syntax (site preference, escape sequence, `ca://` variant) we missed?
3. For **PyDevice** (or soft IOC) paths, is **writable CHAR waveform** the recommended substitute for `lso`, or is there a better record/link pattern for Phoebus writes?
4. Has this improved in Phoebus **5.x** or newer Jackie/PV layers?

Environment: EPICS base 7.x, PyDevice IOC, Phoebus 4.7.4-SNAPSHOT, Channel Access (no PVAccess on this IOC yet). Example path length ~90 characters; `SIZV=255`.

Thanks for any pointers to documented practice or OPI examples that handle long `lso` paths without `$` in the Display Builder `pv_name`.

Best regards,
Kazimierz Gofron

P.S. Phoebus messages

```
WARNING [org.csstudio.display.builder.model] Widget 'SelectedFile' (textentry) 'pv_name' is not fully resolved: 'TAS:Plot:SelectedFile.$'
WARNING [org.csstudio.display.builder.model] Widget 'SelectedFile' (textentry) 'tooltip' is not fully resolved: 'Full path; browse, paste, or edit (lso SelectedFile.$)'
WARNING [org.csstudio.display.builder.model] Widget 'FileSelector' (fileselector) 'tooltip' is not fully resolved: 'Browse for scan file (writes SelectedFile.$)'
WARNING [org.csstudio.display.builder.model] Widget 'FullFileName' (textupdate) 'pv_name' is not fully resolved: 'TAS:Plot:FullFileName_RBV.$'
```

Navigate by Date:
Prev: Re: PVA OUT Links in EPICS: Michael Davidsaver via Tech-talk
Next: Wrapper of pyepics and p4p Wang, Lin via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
Navigate by Thread:
Prev: Re: PVA OUT Links in EPICS: Ralph Lange via Tech-talk
Next: Wrapper of pyepics and p4p Wang, Lin via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  2025  <2026
ANJ, 09 Jun 2026 · Home · News · About · Talk · Base · Modules · Extensions ·
· Distributions · Download · Documents · Links · Licensing ·