Phase 14: Trend settings (desktop and web) and the HTML trend fix #16

Merged
cliu merged 4 commits from docs/phase-14-trends into main 2026-10-02 14:08:55 +10:00
14 changed files with 2837 additions and 8 deletions

View file

@ -39,6 +39,7 @@ Rules:
|---|---|---| |---|---|---|
| Build a display in the Edit Module (text, number field, alarm overview, trend) and check the saved XML | `tasks/create-display.md` | verified | | Build a display in the Edit Module (text, number field, alarm overview, trend) and check the saved XML | `tasks/create-display.md` | verified |
| Deploy / remove display files, export HTML, validate and search with `jwuiutl` | `tasks/deploy-displays.md` | verified | | Deploy / remove display files, export HTML, validate and search with `jwuiutl` | `tasks/deploy-displays.md` | verified |
| Trend: pen sources (history group, aggregates), every pen and chart setting, desktop vs HTML display, 50-pen web workaround (`add_trend_spares.ps1`), Micro Trend | `tasks/trend.md` | verified (desktop); web workaround verified; Micro Trend open (ISS-055) |
| Open and check a display in the browser (HTML display / Mobile Operator) | `tasks/deploy-displays.md` §4 | verified | | Open and check a display in the browser (HTML display / Mobile Operator) | `tasks/deploy-displays.md` §4 | verified |
| Operator layouts (`Layouts.xml`): windows, menus, toolbars, frames, popups, kiosk screens; open displays in frames and layouts | `tasks/layouts.md` | verified (dual screen, per-user layout from docs) | | Operator layouts (`Layouts.xml`): windows, menus, toolbars, frames, popups, kiosk screens; open displays in frames and layouts | `tasks/layouts.md` | verified (dual screen, per-user layout from docs) |
| Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | from docs | | Dataset forms (`*Dia.xml`) and the form description language | R30 summary §3 | from docs |

View file

@ -56,4 +56,5 @@ grep -n "<html>\|<width>\|<height>\|itemName\|itemId\|<source" <DisplayName>.xml
Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), alarm overview Text `CI-Eng-Sample Tank 1`, number field on `TANK1.LEVEL` (live: 72 → 61), alarm overview
(no filter; listed the TANK1.LEVEL alarms), trend pen `TANK1.LEVEL` (legend (no filter; listed the TANK1.LEVEL alarms), trend pen `TANK1.LEVEL` (legend
`CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` = highest-priority storage group). In the HTML `CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` = highest-priority storage group). In the HTML
display the trend drew no line (ISS-041). display the trend drew no line: a trend needs 50 visible pens to draw on the web (ISS-041;
workaround and all trend settings in `trend.md`).

View file

@ -55,4 +55,5 @@ session** and needs a new login. Check live values by writing a test value (`itm
Remove → deploy recreated both files; `-e HTML` output identical to the Edit Module's HTML; Remove → deploy recreated both files; `-e HTML` output identical to the Edit Module's HTML;
validation of `CIENG_Tank` *No problems found* (also after a sample reload with new item ids — validation of `CIENG_Tank` *No problems found* (also after a sample reload with new item ids —
but a stale `<itemId>` then shows 0 at run time, ISS-052); but a stale `<itemId>` then shows 0 at run time, ISS-052);
search worked; browser showed live values. HTML trend without line: ISS-041. search worked; browser showed live values. HTML trend without line: ISS-041 (cause and
workaround in `trend.md` §6).

View file

@ -0,0 +1,132 @@
---
task: Configure a trend (chart) component; what each setting does on the desktop and in the HTML display
version: R1.03
source: IM 36K10C50-01EN §2.27 (Trend, Tables 2.27-10…28), §2.29 (Micro Trend); IM 36K10R30-01EN §4.8.7; installed web client code (`%TLS_WAP_PATH%\mobileoperator\src\fasttools\ui\components\implementation\charts\`); practiced on CI-Eng-Sample (display CIENG_TrendLab) 2026-10-02
status: verified (desktop Operator Interface: every row marked ✅/❌ below; HTML display: §6)
---
# Trend settings (desktop and web)
Example: `examples/CI-Eng-Sample/displays/CIENG_TrendLab.xml` (deployed by
`deploy_displays.cmd`). Method used: change one XML value in the display, deploy, *View >
Reload* in the client, compare.
## 1. Before you start
- **Data**: the trend draws history. `TANK1.LEVEL` / `TANK1.INFLOW` are internal items: after a
CI Server start they are `NOT INIT` (value 0) until something writes them, and the trend then
shows nothing (or a bold black line at 0 with status drawing). For tests run
`displays/trend_feed.ps1` (writes sine waves with `itmval` every 5 s; `-Seconds` = run time).
- **Reload**: changes in the display file show after *View > Reload*. A reload within a few
seconds of the deploy can still show the old file — reload again.
- The **Trend properties** dialog (right-click the trend) and the trend toolbar change the trend
only for the session; *Save trend as* writes a trend definition to
`%TLS_WAP_PATH%\cfg\charts\<name>.xml` (same `<chartPanel>` format; factory `Template1..4.xml`).
The display file holds the start-up settings under `<chart>` › `<config>` › `<chartPanel>`.
## 2. Pen source (`<pen>` › `<source uri=…>`)
```
ci:/item/<Section>.<Tag>[?historygroup=<GROUP>[&amp;aggregationperiod=<PERIOD>]][#<ATTR>]
```
| Part | Values | Result (desktop and web the same) |
|---|---|---|
| no `historygroup` | — | works; trend picks the highest-priority storage group (here `CIENG_SCAN10S`, seen in table mode); legend without `[group]` |
| `historygroup=CIENG_EVENT` / `CIENG_SCAN10S` | an item storage group | works; legend `… [GROUP]` |
| aggregation group without attribute | e.g. `CIENG_AGG` | ❌ `WFL-E-HIS_ITMN` / `ITH-E-NO_ADM_UPD` *Item not defined in group, or group not specified* |
| aggregation group **with** `aggregationperiod` + `#MAX` | periods `30MIN HOUR SHIFT DAY WEEK MONTH YEAR`; attributes `MAX MIN AVG INT SDV CNT DFSM` | ✅ one flat segment per finished period; legend `… / AGG_MAX 30MIN [CIENG_AGG]` |
| `#H` `#HH` `#L` `#LL` `#DB` | limit / deadband attributes | ❌ *Record not found* unless the limit history is stored |
| `uri=""` | — | empty pen |
`&` must be written `&amp;` in the XML. The *Pen attributes > Attribute[n]* property of the
component is the same attribute (`ITEM_VALUE`, `AGG_MAX`…): connecting it to an item by mistake
gives *Short attribute name (<value>) is invalid* (ISS-041 history).
## 3. Pen settings (`<pen>`)
| XML | Values | Desktop result |
|---|---|---|
| `type` | 0/1 line, 2 bar (no button in the pen panel), 3 stair-step, 4 scatter (squares); **+256** = status drawing: offline / `NOT INIT` parts drawn bold black (256 = Edit Module default = line + status) | ✅ |
| `color`, `stroke width` | | ✅ |
| `paint` (fill) `<paint type="paint"><paint type="colorSet" …/></paint>` | | ✅ filled from 0 up, **opaque** (covers other pens); legend symbol filled |
| `visible` false | | ✅ line hidden **and** removed from legend; tick cleared in the pen panel |
| `visibleLegend` false / `legendText` | | ✅ hidden from / renamed in the legend |
| `scaleRangeType` | **0** item scale range (item definition), **1** manual `minimum`/`maximum`, **2** fit to data (with margin; min/max ignored) | ✅ |
| `procentual` | | ✅ axis 0–100 % of the range, `%` label |
| `timeShift` | seconds | ✅ data drawn later by that time (overlay of older data) |
| `axisVisible` | | ✅ value axis (left); clicking a legend entry also shows that pen's axis and thickens the line (hover thickens) |
| `axisPosition` | 0 left, 1 right | ✅ |
| `axisColor`, `labelColor` (`<axisColor type="colorSet" r=… g=… b=…/>`, `@NULL` = pen colour) | | ✅ axis + ticks / numbers |
| `labelRotation` | degrees | ✅ |
| `majorTickVisible` + `minorTickVisible` false | | removes the numbers too |
| `title`, `titlePlacement` | | ❌ nothing shown |
| `majorGridVisible`, `minorGridVisible`, `majorGridColor` | | ✅ horizontal grid in pen colour / given colour |
| `lowHighLimitGridVisible`, `lowLowHighHighLimitGridVisible` | | ✅ lines at the **item definition** limits |
| `lowLimit`…`highHighLimit` | | ❌ ignored (item definition limits are used) |
| `lowHighLimitGridAreaVisible` | | ✅ band L…H in pen colour, **opaque, drawn over the line** |
| `maximumPens` (chart level) | | ✅ only the first n pens are loaded |
| `description` | | pen panel shows the **item** description, not this value |
## 4. Chart settings (`<chartPanel>`)
| Group | XML | Desktop result |
|---|---|---|
| Time range | `<timeRange type="timeRangeLast" count="10"><type type="timeUnit" value="TimeUnitMinute"/></timeRange>`; `timeRangeCurrent` (no count) = current minute/hour/day…; units `TimeUnitMinute Hour Day Week Month Year` | ✅ (*Current hour*: 12:00–13:00, line up to now) |
| | `updating` true | ✅ runs live when opened (play grey, stop red) |
| | `updateInterval` (s) | ✅ shown in *Update every* (60 → "1 Minutes") |
| | `autoUpdateInterval` true | ✅ the *Update every* field disappears |
| | `fillHistory` false | ✅ empty (all pens red tag) until the first update interval, then filled |
| | custom range `timeRangeSpecific` (`startTime`/`endTime`) | not tested |
| Performance | `optimised` true (default) = sample interval by zoom (`cfg\configurations\ChartThresholdTables.xml`) | — |
| | `optimised` false + `useSampleInterval` true + `sampleInterval` 60 | ✅ one point per 60 s, last value held to now |
| | `useSampleInterval` false | ✅ all stored samples |
| | `updateFromHistory` false (runtime values) | no visible difference |
| Appearance | `plotAreaTransparent` false + `plotAreaPaint` | ✅ plot colour (paint has no effect while transparent) |
| | `backgroundPaint` | ❌ no visible effect |
| | `hairlineVisible`, `hairlineColor` | ✅ toolbar hairline button on; click in the plot → line + box with time and pen values |
| | `timeSliderVisible`, `valueSliderVisible` false | ✅ sliders removed |
| | `xAxisReversed` / `yAxisReversed` | ✅ newest left **and** time axis moves to the top / 0 at top **and** value axis moves right |
| | `renderMode` `Rendering2d`, `RenderingTable`, `Rendering3dObl` (`Rendering3dOrt`, `RenderingCSS` not tested) | ✅ table = sample time, value and status per pen (good to see what the server returns); 3D = hatched ribbons |
| Time axis | `timeAxisMajorGridColor`, `timeAxisLabelRotation`, `timeAxisTitle` | ✅ (the time-axis title shows, unlike the pen title) |
| | `timeAxisLongLabelVisible` false | ✅ date line under the first label removed |
| | `timeAxisMinorTickVisible`, `timeAxisMinorGridVisible` | nothing at a 10-minute range |
| Header/footer | `headerText`, `footerText` | ✅ top-left above the plot / bottom-left below the time control |
| Legend | `legendPositionType` `PositionNorthEast` (default, right panel), `PositionSouthWest` (= full-height panel on the **left**); also `NorthBottom NorthTop NorthWest SouthBottom SouthTop SouthEast East Absolute` | ✅ |
| | `legendTitle`, `legendColor`, `legendBackgroundColor`, `legendTransparancy` | ✅ |
| Controls | `toolbarVisible` false, `timeRangeControlVisible` false | ✅ toolbar / date and range boxes removed |
| Pen panel | `penPanelVisible`; `penPanelLayout` columns: 0 visible, 1 colour, 2 source, 3 description, 4 units, 5 hairline value, 6 statistics (min \| max \| avg of the shown range), 7 legend, 8 min, 9 max, 10 %, 11 scale range, 12 time offset, 13 appearance, 14 axis, 15 grid (default visible 0–4, 8, 9, 11, 13) | ✅ |
Gaps (CI Server stopped): the desktop joined the last and next sample with a straight line, or
held a scan-group pen flat (seen once); the web drops to 0.
## 5. Component property sheet (Edit Module, connectable)
20 pen slots `[00]`–`[19]`. Inputs (⇦, item → trend): colours, tooltip, visible, transparency,
rotation, zoom. Outputs (⇨): *Hairline value[n]*, *Time range begin/end*, *Update interval*,
*Updating possible*. Both (◇): *Item name[n]*, *Attribute[n]*, *Color[n]*, *Min/Max[n]*,
*Scale type[n]*, *History group[n]*, *Updating*, *Use history*, *Item index/name*,
*Configuration file*. Connections were listed, not tested.
## 6. HTML display (web client)
- **A trend with fewer than 50 visible pens with an item draws no line** in R1.03 (ISS-041):
the web code always builds 50 data columns (`PEN_COUNT_LIMIT`) but labels only the visible
pens with an item; console `Mismatch between number of labels (…) and number of columns in
array (51)`. The desktop is not affected.
- **Workaround** (verified 2026-10-02): pad the trend to 50 pens with
`displays/add_trend_spares.ps1 -Path <display>.xml`. Spares copy the first pen's source,
are scaled to 1E30–2E30 (clipped), hidden from the legend and get blank unique legend texts
in the legend background colour
(the web legend ignores *Show in legend*, ISS-056). Run it again after editing the trend; do
not keep hidden real pens (they count against the 50). Cost: 50 history requests per trend.
- Working on the web as on the desktop: value axis, last/current time range, update interval,
updating at start, plot colour, time-axis grid colour and label rotation, header and footer,
hidden range control. Not applied: legend position, pen panel, trend toolbar (no way to add
pens in the browser). Supported-property lists: IM 36K10C50 Table 2.27-28, IM 36K10R30 §4.8.7.
- **Micro Trend** (`<microTrend>`, up to 4 pens, own SVG drawing, no controls; per-pen
`<property type="componentProperty"><name>itemName[0]</name><value>…</value></property>`,
`scaleMin[n]`, `scaleMax[n]`; elements `numberOfPens`, `realTime`, `fillWithHistory`,
`timeRange` (s, default 300), `sampleCount` (default 300)): drew on desktop and web the first
time, then stayed blank on several later opens and later drew again; after an in-page reload
sometimes only part of a pen shows (intermittent, ISS-055, open).

View file

@ -114,6 +114,9 @@ New items start with status 13 (`NOT INIT`) until a value is written.
| `19b_audit_item_df.qli` | *Audit trailing wanted* for `PUMP1.MODE` (loaded with `dssqld -m`) | | `19b_audit_item_df.qli` | *Audit trailing wanted* for `PUMP1.MODE` (loaded with `dssqld -m`) |
| `displays/CIENG_Menu.xml` | Navigation display (200 x 700): *Tank 1*, *Current Alarm* (main frame), *Tank 1 popup* (layout `popup`) | | `displays/CIENG_Menu.xml` | Navigation display (200 x 700): *Tank 1*, *Current Alarm* (main frame), *Tank 1 popup* (layout `popup`) |
| `layouts/CIENG_Operator.xml`, `layouts/layout.ps1` | Operator layout block and the script that adds/removes it in `Layouts.xml` | | `layouts/CIENG_Operator.xml`, `layouts/layout.ps1` | Operator layout block and the script that adds/removes it in `Layouts.xml` |
| `displays/CIENG_TrendLab.xml` | Trend lab (1000 x 860, HTML mode): trend of `TANK1.LEVEL` (no history group, value axis) and `TANK1.INFLOW` (`CIENG_EVENT`), live, last hour, padded with 48 spare pens so it draws in the browser; Micro Trend of both items (ISS-055) |
| `displays/add_trend_spares.ps1` | Pads every trend in a display file to 50 visible pens (web workaround, ISS-041); safe to run again |
| `displays/trend_feed.ps1` | Writes sine-wave test values to `TANK1.LEVEL` / `TANK1.INFLOW` every 5 s (`-Seconds`, default 3600) |
| `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the displays into the operator interface and export their HTML versions / delete them | | `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the displays into the operator interface and export their HTML versions / delete them |
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) | | `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
@ -161,8 +164,8 @@ priority 1). To try it on a test system: `itmval -p -n CI-Eng-Sample.TANK1.LEVEL
No admin rights needed. After `load.cmd`: No admin rights needed. After `load.cmd`:
1. `displays\deploy_displays.cmd` copies `CIENG_Tank` and `CIENG_Menu` into the operator 1. `displays\deploy_displays.cmd` copies `CIENG_Tank`, `CIENG_Menu` and `CIENG_TrendLab` into
interface and creates their HTML versions. the operator interface and creates their HTML versions.
2. `powershell -ExecutionPolicy Bypass -File layouts\layout.ps1` adds the layout 2. `powershell -ExecutionPolicy Bypass -File layouts\layout.ps1` adds the layout
`CIENG_Operator` to `Layouts.xml` (first run saves `Layouts-before-CIENG.xml`). `CIENG_Operator` to `Layouts.xml` (first run saves `Layouts-before-CIENG.xml`).
**Restart the Operator Interface** afterwards: it reads the layouts only at start. **Restart the Operator Interface** afterwards: it reads the layouts only at start.
@ -172,6 +175,12 @@ No admin rights needed. After `load.cmd`:
banner. HTML display (web): `http://localhost:8080/mobileoperator/?d=CIENG_Tank&l=CIENG_Operator` banner. HTML display (web): `http://localhost:8080/mobileoperator/?d=CIENG_Tank&l=CIENG_Operator`
(CI Server login). (CI Server login).
Trends: `TANK1.LEVEL` and `TANK1.INFLOW` are internal items and stay `NOT INIT` after a CI
Server start, so trends stay empty. `powershell -ExecutionPolicy Bypass -File
displays\trend_feed.ps1 -Seconds 3600` writes test values every 5 s. `CIENG_TrendLab` (also
in the browser: `?d=CIENG_TrendLab`) shows the trend padded to 50 pens, which the HTML display
needs to draw (ISS-041); `CIENG_Tank`'s trend has 1 pen and draws only on the desktop.
Remove: `layouts\layout.ps1 -Remove` (restores the file exactly) and Remove: `layouts\layout.ps1 -Remove` (restores the file exactly) and
`displays\remove_displays.cmd`. Close the displays in the Edit Module first. See skill `displays\remove_displays.cmd`. Close the displays in the Edit Module first. See skill
`graphics`. `graphics`.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,85 @@
# Pad every trend (chart) in a display file to 50 visible pens so it also draws in the HTML
# display (web client). CI Server R1.03.00: the web trend always builds 50 data columns but only
# labels the visible pens with an item; with fewer than 50 such pens it draws nothing (ISS-041).
#
# Spare pens copy the first real pen's source, are scaled far outside the data (manual scale
# 1E30..2E30, so the line is clipped), hidden from the legend and get blank, unique legend texts
# (1, 2, 3 ... spaces) in the legend background colour, because the web legend ignores
# "Show in legend". Empty pens are removed; do not keep hidden real pens (they count against 50).
# Run it again after editing the trend in the Edit Module (it only adds what is missing).
#
# Usage: powershell -ExecutionPolicy Bypass -File add_trend_spares.ps1 -Path <display>.xml
param([Parameter(Mandatory = $true)][string]$Path)
$target = 50
$text = [IO.File]::ReadAllText($Path)
$nl = "`r`n"
if (-not $text.Contains($nl)) { $nl = "`n" }
function Set-Tag([string]$pen, [string]$tag, [string]$value) {
$rx = New-Object Text.RegularExpressions.Regex ("<$tag>[^<]*</$tag>|<$tag/>")
return $rx.Replace($pen, "<$tag>$value</$tag>", 1)
}
$panelRx = New-Object Text.RegularExpressions.Regex '(?s)<chartPanel>.*?</chartPanel>'
$penRx = New-Object Text.RegularExpressions.Regex '(?s)[ \t]*<pen type="pen">.*?</pen>\r?\n?'
$changed = 0
$text = $panelRx.Replace($text, {
param($m)
$panel = $m.Value
$pens = $penRx.Matches($panel)
if ($pens.Count -eq 0) { return $panel }
$real = @(); $spareCount = 0
foreach ($p in $pens) {
$v = $p.Value
$empty = $v.Contains('uri=""')
$isSpare = $v.Contains('<minimum>1.0E30</minimum>')
if ($isSpare) { $spareCount++ }
elseif (-not $empty) { $real += $v }
}
if ($real.Count -eq 0) { return $panel }
$visibleReal = 0
foreach ($v in $real) { if ($v.Contains('<visible>true</visible>')) { $visibleReal++ } }
$need = $target - $visibleReal
if ($need -lt 0) { $need = 0 }
$template = $real[0]
# spare colour = legend background, so their (blank) web legend entries do not show
$bg = (New-Object Text.RegularExpressions.Regex '<legendBackgroundColor type="colorSet" r="\d+" g="\d+" b="\d+"/>').Match($panel)
$spareColor = '<color type="colorSet" r="240" g="240" b="240"/>'
if ($bg.Success) { $spareColor = $bg.Value.Replace('<legendBackgroundColor ', '<color ') }
$spares = @()
for ($i = 1; $i -le $need; $i++) {
$s = $template
$s = Set-Tag $s 'legendText' (' ' * $i)
$s = Set-Tag $s 'description' ''
$s = Set-Tag $s 'type' '1'
$s = Set-Tag $s 'visible' 'true'
$s = Set-Tag $s 'visibleLegend' 'false'
$s = Set-Tag $s 'axisVisible' 'false'
$s = Set-Tag $s 'scaleRangeType' '1'
$s = Set-Tag $s 'minimum' '1.0E30'
$s = Set-Tag $s 'maximum' '2.0E30'
$s = Set-Tag $s 'procentual' 'false'
$s = Set-Tag $s 'annotationVisible' 'false'
foreach ($g in @('majorGridVisible', 'minorGridVisible', 'lowHighLimitGridVisible', 'lowHighLimitGridAreaVisible', 'lowLowHighHighLimitGridVisible')) { $s = Set-Tag $s $g 'false' }
$s = (New-Object Text.RegularExpressions.Regex '<color type="colorSet" r="\d+" g="\d+" b="\d+"/>').Replace($s, $spareColor, 1)
$s = (New-Object Text.RegularExpressions.Regex '<stroke type="stroke" width="[^"]*"').Replace($s, '<stroke type="stroke" width="0.0"', 1)
$s = (New-Object Text.RegularExpressions.Regex '<paint type="paint">.*?</paint>(?=\s*<visible>)', 'Singleline').Replace($s, '<paint>@NULL</paint>', 1)
$spares += $s
}
# rebuild: real pens first, then spares, at the place of the first pen
$first = $pens[0].Index
$last = $pens[$pens.Count - 1]
$before = $panel.Substring(0, $first)
$after = $panel.Substring($last.Index + $last.Length)
$body = ''
foreach ($v in $real) { $body += $v }
foreach ($v in $spares) { $body += $v }
$panel = $before + $body + $after
$panel = (New-Object Text.RegularExpressions.Regex '<maximumPens>\d+</maximumPens>').Replace($panel, "<maximumPens>$target</maximumPens>", 1)
$script:changed++
Write-Host ("Trend {0}: {1} real pen(s), {2} old spare(s) replaced, {3} spare(s) written" -f $script:changed, $real.Count, $spareCount, $need)
return $panel
})
[IO.File]::WriteAllText($Path, $text)
Write-Host "Done: $changed trend(s) in $Path"

View file

@ -8,5 +8,7 @@ set WAP=%TLS_WAP_PATH%
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\" copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
copy /y CIENG_Menu.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\" copy /y CIENG_Menu.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
copy /y CIENG_TrendLab.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Menu call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Menu
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_TrendLab

View file

@ -1,9 +1,11 @@
@echo off @echo off
rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00. rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00.
rem Close CIENG_Tank and CIENG_Menu in the Edit Module first. rem Close CIENG_Tank, CIENG_Menu and CIENG_TrendLab in the Edit Module first.
set WAP=%TLS_WAP_PATH% set WAP=%TLS_WAP_PATH%
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Tank.xml" del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Tank.xml"
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html" del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html"
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Menu.xml" del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_Menu.xml"
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Menu.html" del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Menu.html"
del /q "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\CIENG_TrendLab.xml"
del /q "%WAP%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_TrendLab.html"

View file

@ -0,0 +1,16 @@
# Feed test values into the CI-Eng-Sample tank items so trends have a moving line.
# CI Server R1.03.00. TANK1.LEVEL and TANK1.INFLOW are internal items: after a restart they
# stay NOT INIT until something writes them. Writes every 5 s with itmval; stop with Ctrl+C.
# LEVEL = 50 +/- 25 % (period 10 min, stays inside the L 20 / H 80 alarm limits)
# INFLOW = 250 +/- 150 m3/h (period 4 min)
param([int]$Seconds = 3600)
$end = (Get-Date).AddSeconds($Seconds)
while ((Get-Date) -lt $end) {
$t = [double]((Get-Date) - (Get-Date).Date).TotalSeconds
$level = [math]::Round(50 + 25 * [math]::Sin(2 * [math]::PI * $t / 600), 1)
$inflow = [math]::Round(250 + 150 * [math]::Sin(2 * [math]::PI * $t / 240), 1)
itmval -p -n CI-Eng-Sample.TANK1.LEVEL -v $level > $null
itmval -p -n CI-Eng-Sample.TANK1.INFLOW -v $inflow > $null
Start-Sleep -Seconds 5
}

View file

@ -60,7 +60,7 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-038 | 2026-10-01 | HISTORY (`ithloahis` + rollover) | An `ithloahis` sample that was dropped (dated 11:50, before the active unit) still became the **initial value** of the next unit: after a forced rollover at 12:05:26 `ITEM_HISTORY` shows `CI-Eng-Sample.TANK1.INFLOW` = 95 (`INITIAL_VALUE` 1) although the item's value was 112. History after loading old samples can therefore show a wrong value at the next rollover. | closed | Retested 2026-10-01 after a CI Server restart (first unit 18:05:46). (a) Sample dated one day earlier (95), live value 112, forced rollover: initial value 112 — correct. (b) Sample dated 18:00 (96, a few minutes before the first unit), live value 113, forced rollover: initial value **96** — wrong again; the live item value stayed 113. So a dropped sample dated shortly before the first unit (same day) becomes the next unit's initial value; a much older one did not. Also found: a forced rollover within 2 minutes of the previous one is refused (`DSI-E-ROLLDONE`). Documented as a caution; behaviour confirmed, ready to close. Closed 2026-10-01 (confirmed by user). | `.claude/skills/system-management/tasks/load-history.md`; `knowledge/manuals/IM36K10C40-01EN.md` §3 | | ISS-038 | 2026-10-01 | HISTORY (`ithloahis` + rollover) | An `ithloahis` sample that was dropped (dated 11:50, before the active unit) still became the **initial value** of the next unit: after a forced rollover at 12:05:26 `ITEM_HISTORY` shows `CI-Eng-Sample.TANK1.INFLOW` = 95 (`INITIAL_VALUE` 1) although the item's value was 112. History after loading old samples can therefore show a wrong value at the next rollover. | closed | Retested 2026-10-01 after a CI Server restart (first unit 18:05:46). (a) Sample dated one day earlier (95), live value 112, forced rollover: initial value 112 — correct. (b) Sample dated 18:00 (96, a few minutes before the first unit), live value 113, forced rollover: initial value **96** — wrong again; the live item value stayed 113. So a dropped sample dated shortly before the first unit (same day) becomes the next unit's initial value; a much older one did not. Also found: a forced rollover within 2 minutes of the previous one is refused (`DSI-E-ROLLDONE`). Documented as a caution; behaviour confirmed, ready to close. Closed 2026-10-01 (confirmed by user). | `.claude/skills/system-management/tasks/load-history.md`; `knowledge/manuals/IM36K10C40-01EN.md` §3 |
| ISS-039 | 2026-10-01 | HISTORY (setup) | Installed vs manuals: `hisdbg` menu runs to option 22 (manual text: `-1 - 10`, list to 22) and lists history types 4 (`STATION_STAT`) and 36 (`SYS_LOG`) not in IM 36K10L20 §3.1; `ithsag.sup` keyword `run_interval` (manual: *Heartbeat*) and `queue_size` 500 KB (manual default 200); the option-type table in IM 36K10L20 §3.1 is garbled in the PDF (observed: Scan/Time `1 1`, Event/Item `2 2`, Aggregation `4 4`). | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L20-01EN.md` §3; `knowledge/manuals/IM36K10C40-01EN.md` §2 | | ISS-039 | 2026-10-01 | HISTORY (setup) | Installed vs manuals: `hisdbg` menu runs to option 22 (manual text: `-1 - 10`, list to 22) and lists history types 4 (`STATION_STAT`) and 36 (`SYS_LOG`) not in IM 36K10L20 §3.1; `ithsag.sup` keyword `run_interval` (manual: *Heartbeat*) and `queue_size` 500 KB (manual default 200); the option-type table in IM 36K10L20 §3.1 is garbled in the PDF (observed: Scan/Time `1 1`, Event/Item `2 2`, Aggregation `4 4`). | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10L20-01EN.md` §3; `knowledge/manuals/IM36K10C40-01EN.md` §2 |
| ISS-040 | 2026-10-01 | HISTORY (aggregation) | Aggregation group `CIENG_AGG` (30 min + hour, `TANK1.LEVEL` max/min/avg) ran (`ithsag.log`: *Aggregation Completed*) but stored no values: retrieval gave `0x09 = ITM error` per period. `TANK1.LEVEL` was in `CIENG_EVENT` and `CIENG_SCAN10S`, both priority 0. Also `INTERPOLATION = "30 minutes"` is refused by `dssqld`; the installed name is `30Minutes`. | closed | Closed 2026-10-01 (confirmed by user). 2026-10-01 14:02: after `CIENG_SCAN10S` got `PRIORITY` 10, the 13:30–14:00 period stored max 77, min 33, avg 52.7, quality 1000 (`ithdbg` 20 and `dssqld` with `INTERPOLATION = "30Minutes"`). Cause: equal source priorities (C40 §2.1 says the highest-priority group is the source, but not that a tie gives nothing). Sample fixed (priority 10). The hourly value for 13:00–14:00 was not stored (first half had no source); not rechecked. Proposed close. | `.claude/skills/history-management/tasks/storage-groups.md` §4 (done); `knowledge/manuals/IM36K10C40-01EN.md` §3 (done); `examples/CI-Eng-Sample/03_his_group_df.qli`, `README.md` (done) | | ISS-040 | 2026-10-01 | HISTORY (aggregation) | Aggregation group `CIENG_AGG` (30 min + hour, `TANK1.LEVEL` max/min/avg) ran (`ithsag.log`: *Aggregation Completed*) but stored no values: retrieval gave `0x09 = ITM error` per period. `TANK1.LEVEL` was in `CIENG_EVENT` and `CIENG_SCAN10S`, both priority 0. Also `INTERPOLATION = "30 minutes"` is refused by `dssqld`; the installed name is `30Minutes`. | closed | Closed 2026-10-01 (confirmed by user). 2026-10-01 14:02: after `CIENG_SCAN10S` got `PRIORITY` 10, the 13:30–14:00 period stored max 77, min 33, avg 52.7, quality 1000 (`ithdbg` 20 and `dssqld` with `INTERPOLATION = "30Minutes"`). Cause: equal source priorities (C40 §2.1 says the highest-priority group is the source, but not that a tie gives nothing). Sample fixed (priority 10). The hourly value for 13:00–14:00 was not stored (first half had no source); not rechecked. Proposed close. | `.claude/skills/history-management/tasks/storage-groups.md` §4 (done); `knowledge/manuals/IM36K10C40-01EN.md` §3 (done); `examples/CI-Eng-Sample/03_his_group_df.qli`, `README.md` (done) |
| ISS-041 | 2026-10-01 | GRAPHICS (HTML trend) | In the HTML display (`localhost:8080/mobileoperator/?d=CIENG_Tank`) the trend shows the pen legend `CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` and time axis but draws no line, although `ITEM_HISTORY` has 420 samples in the shown hour. Browser console: `Mismatch between number of labels (Time,CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]) and number of columns in array (51)`. The trend has 4 further empty pens. 2026-10-01 later: the trend also had the property `chart.attribute[00]` connected to `TANK1.LEVEL` (added by mistake with the pen); the Operator Interface (desktop) showed *Short attribute name ( 61.0) is invalid*. After removing it the desktop trend draws the line, but the HTML trend still logs the mismatch error. | open | Tried 2026-10-01 (fresh session after a restart, 283 history samples in the hour): removing the 4 empty pens, and `updating` true / `updateInterval` 10 like the factory `AOG_TrendOpen` — the mismatch error and the empty trend stayed in both cases (changes reverted). Still to try: a Micro Trend, the HTML-supported trend properties (IM 36K10R30 §4.8.7), clearing the browser/`MO_CACHE_DISPLAYS` cache (the console shows `CIENG_Tank.xml` *loaded (from cache)*), and adding the pen to the factory *Open Trend* display in the HTML client. | `.claude/skills/graphics/tasks/create-display.md`; `knowledge/manuals/IM36K10R30-01EN.md` §4 | | ISS-041 | 2026-10-01 | GRAPHICS (HTML trend) | In the HTML display (`localhost:8080/mobileoperator/?d=CIENG_Tank`) the trend shows the pen legend `CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]` and time axis but draws no line, although `ITEM_HISTORY` has 420 samples in the shown hour. Browser console: `Mismatch between number of labels (Time,CI-Eng-Sample.TANK1.LEVEL [CIENG_SCAN10S]) and number of columns in array (51)`. The trend has 4 further empty pens. 2026-10-01 later: the trend also had the property `chart.attribute[00]` connected to `TANK1.LEVEL` (added by mistake with the pen); the Operator Interface (desktop) showed *Short attribute name ( 61.0) is invalid*. After removing it the desktop trend draws the line, but the HTML trend still logs the mismatch error. | closed | Tried 2026-10-01 (fresh session after a restart, 283 history samples in the hour): removing the 4 empty pens, and `updating` true / `updateInterval` 10 like the factory `AOG_TrendOpen` — the mismatch error and the empty trend stayed in both cases (changes reverted). Still to try: a Micro Trend, the HTML-supported trend properties (IM 36K10R30 §4.8.7), clearing the browser/`MO_CACHE_DISPLAYS` cache (the console shows `CIENG_Tank.xml` *loaded (from cache)*), and adding the pen to the factory *Open Trend* display in the HTML client. **Cause found 2026-10-02** (trend lab `CIENG_TrendLab`): a web-client defect, not a display setting. `DataSource.refresh()` in the web trend code (`mobileoperator\src\…\charts\trend\datasources\DataSource.js`, same in the served `src\lib\fasttools.min.js`) numbers **all 50** internal pen slots (`PEN_COUNT_LIMIT`; the filter for empty/hidden pens is commented out), so each data row has 51 columns, while the dygraph labels only list visible pens with an item. Proof: a 50-pen test display drew normally in the browser. Ruled out on the way: the `?historygroup` suffix, empty pens, `optimised`. **Workaround** (verified on the web): pad each trend to 50 visible pens with `displays/add_trend_spares.ps1` (spares scaled out of view, blank unique legend texts); sample `CIENG_TrendLab` uses it. Alternatively a Micro Trend (ISS-055). Report to Yokogawa. Close when the user confirms. Closed 2026-10-02 (confirmed by user). | `.claude/skills/graphics/tasks/trend.md` (done); `create-display.md`, `deploy-displays.md` (done); `knowledge/manuals/IM36K10R30-01EN.md` §4 (done) |
| ISS-042 | 2026-10-01 | GRAPHICS (layouts) | Installed vs `Layouts.readme`: the factory layouts use status line item types `displayName`, `playbackIndicator` and `dateTime` and the commands `reload <frame>` / `reload all`, none of which the readme lists (readme: `statusText`, `userName`, `progresBar`, `graphicsQueueLevel`, `connectionState`); the readme also writes `zooom` for the zoom command (factory files use `zoom`). | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `.claude/skills/graphics/tasks/layouts.md` §2 | | ISS-042 | 2026-10-01 | GRAPHICS (layouts) | Installed vs `Layouts.readme`: the factory layouts use status line item types `displayName`, `playbackIndicator` and `dateTime` and the commands `reload <frame>` / `reload all`, none of which the readme lists (readme: `statusText`, `userName`, `progresBar`, `graphicsQueueLevel`, `connectionState`); the readme also writes `zooom` for the zoom command (factory files use `zoom`). | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `.claude/skills/graphics/tasks/layouts.md` §2 |
| ISS-043 | 2026-10-01 | REPORT (system reports) | IM 36K10C30 App. 1.3 names two system reports `ALM_ATTS_CUR` and `ALM_ATRS_HIS`; the installed reports are `ALM_ATTRS_CUR` and `ALM_ATTRS_HIS`. The other 26 names match. | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10C30-01EN.md` §8 (done) | | ISS-043 | 2026-10-01 | REPORT (system reports) | IM 36K10C30 App. 1.3 names two system reports `ALM_ATTS_CUR` and `ALM_ATRS_HIS`; the installed reports are `ALM_ATTRS_CUR` and `ALM_ATTRS_HIS`. The other 26 names match. | closed | Installed software is the reference (standing user decision). Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10C30-01EN.md` §8 (done) |
| ISS-044 | 2026-10-01 | REPORT (scheduling) | Behaviour not in the manuals, found by quick load: a generation interval below 10 minutes is refused (`HIS-E-ROLLTOFAST`, the interval is the rollover of the report's storage group); a scheduled report cannot be deleted (`RPT-E-ACTIVE`) until `ACTIVATION_TIME` and `GENERATION_INTERVAL` are cleared; `CORRECT_DAYLIGHT` 0 counts intervals in UTC (06:00 set for January ran at 05:00 in October); a past activation time moves to the next slot - once (modify, past time within the lifetime) a single report labelled with the old time was generated, at insert with an older time none. | closed | Documented as verified behaviour; the one-off generation for a past activation time is not fully understood. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `.claude/skills/reporting/tasks/define-reports.md` §1, §5, §6; `knowledge/manuals/IM36K10C30-01EN.md` §2; `examples/CI-Eng-Sample/83a_stop_report_df.qli`, `18_report_df.qli` | | ISS-044 | 2026-10-01 | REPORT (scheduling) | Behaviour not in the manuals, found by quick load: a generation interval below 10 minutes is refused (`HIS-E-ROLLTOFAST`, the interval is the rollover of the report's storage group); a scheduled report cannot be deleted (`RPT-E-ACTIVE`) until `ACTIVATION_TIME` and `GENERATION_INTERVAL` are cleared; `CORRECT_DAYLIGHT` 0 counts intervals in UTC (06:00 set for January ran at 05:00 in October); a past activation time moves to the next slot - once (modify, past time within the lifetime) a single report labelled with the old time was generated, at insert with an older time none. | closed | Documented as verified behaviour; the one-off generation for a past activation time is not fully understood. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `.claude/skills/reporting/tasks/define-reports.md` §1, §5, §6; `knowledge/manuals/IM36K10C30-01EN.md` §2; `examples/CI-Eng-Sample/83a_stop_report_df.qli`, `18_report_df.qli` |
@ -74,3 +74,5 @@ development system (see "Test system" in `progress.md`); they do not exist on ot
| ISS-052 | 2026-10-01 | GRAPHICS (stale item id) | The HTML display `CIENG_Tank` showed **0** in its number field on `CI-Eng-Sample.TANK1.LEVEL` (live value 50) and the popup `ITM-E-NO_MAIN, No main item found`, in a fresh session after a CI Server restart. The display XML stores `<itemName>` **and** `<itemId>1.1.268.0.0.1.1.7</itemId>` from when it was built; after today's sample reloads the item has `ID_NUMBER` 357. Phase 10 had seen live values after a reload, so the id is not always used, but here it broke the field. | closed | Fixed in the sample: removed the `<itemId>` line from `displays/CIENG_Tank.xml`, redeployed; the field shows 50 and the popup is gone (binding by name). Documented in `create-display.md`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `examples/CI-Eng-Sample/displays/CIENG_Tank.xml`; `.claude/skills/graphics/tasks/create-display.md`; `.claude/skills/graphics/tasks/deploy-displays.md` | | ISS-052 | 2026-10-01 | GRAPHICS (stale item id) | The HTML display `CIENG_Tank` showed **0** in its number field on `CI-Eng-Sample.TANK1.LEVEL` (live value 50) and the popup `ITM-E-NO_MAIN, No main item found`, in a fresh session after a CI Server restart. The display XML stores `<itemName>` **and** `<itemId>1.1.268.0.0.1.1.7</itemId>` from when it was built; after today's sample reloads the item has `ID_NUMBER` 357. Phase 10 had seen live values after a reload, so the id is not always used, but here it broke the field. | closed | Fixed in the sample: removed the `<itemId>` line from `displays/CIENG_Tank.xml`, redeployed; the field shows 50 and the popup is gone (binding by name). Documented in `create-display.md`. Close when the user confirms. Closed 2026-10-01 (confirmed by user). | `examples/CI-Eng-Sample/displays/CIENG_Tank.xml`; `.claude/skills/graphics/tasks/create-display.md`; `.claude/skills/graphics/tasks/deploy-displays.md` |
| ISS-053 | 2026-10-01 | HAC (manual vs installed) | IM 36K10J20 vs the installed `hac.sup`/scripts: (1) *Start in manual mode*: §1.3 says HAC starts in manual by default, §1.5 and the `hac.sup` help say automatic; the installed template sets `START_MANUAL = YES`. (2) `MAXOPNDB` default: help 500, manual 50 (§1.5) and 5 (§4.8). (3) `QUESIZE` default: help 100 K, manual 2000 K (file sets 2000). (4) §4.5 says `tls\com` and `tls\exe` cannot be mirrored, but the template mirrors `12 COM` (excluding `ci_command.cmd`). (5) §4.4 says the critical processes are already in the queue/CPU check lists; the installed file has no `MAX_QUEUE`/`MAX_CPU`/`INACTIVE` lines. (6) `hacw_standby` uses `TLS_LST_PATH` when `TLS_BACKUP_PATH` is unset (manual: `TLS_ALLUSERS_PATH`). (7) The template `IP_DEVICE` is `localhost` (priority 0), which §1.3 says to remove after testing. (8) HMI properties have `communicationInterval`/`Timeout`/`RetryCount`, not in the manual. | closed | Installed software is the reference (standing user decision); documented in the J20 summary §5 and the `high-availability` skill. Not testable on one server. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J20-01EN.md`; `.claude/skills/high-availability/tasks/*.md` | | ISS-053 | 2026-10-01 | HAC (manual vs installed) | IM 36K10J20 vs the installed `hac.sup`/scripts: (1) *Start in manual mode*: §1.3 says HAC starts in manual by default, §1.5 and the `hac.sup` help say automatic; the installed template sets `START_MANUAL = YES`. (2) `MAXOPNDB` default: help 500, manual 50 (§1.5) and 5 (§4.8). (3) `QUESIZE` default: help 100 K, manual 2000 K (file sets 2000). (4) §4.5 says `tls\com` and `tls\exe` cannot be mirrored, but the template mirrors `12 COM` (excluding `ci_command.cmd`). (5) §4.4 says the critical processes are already in the queue/CPU check lists; the installed file has no `MAX_QUEUE`/`MAX_CPU`/`INACTIVE` lines. (6) `hacw_standby` uses `TLS_LST_PATH` when `TLS_BACKUP_PATH` is unset (manual: `TLS_ALLUSERS_PATH`). (7) The template `IP_DEVICE` is `localhost` (priority 0), which §1.3 says to remove after testing. (8) HMI properties have `communicationInterval`/`Timeout`/`RetryCount`, not in the manual. | closed | Installed software is the reference (standing user decision); documented in the J20 summary §5 and the `high-availability` skill. Not testable on one server. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J20-01EN.md`; `.claude/skills/high-availability/tasks/*.md` |
| ISS-054 | 2026-10-01 | AD (manual vs installed) | IM 36K10J40 vs the installed `dssana.sup`: the *Active Directory* tab has keywords the manual does not describe — `AD_SERVER`, `AD_SERVER_BACKUP` (host[:port], 389/636), `AD_SECURE` (LDAPS; installed `NO`, help says default yes), `AD_ACCESS_USER`/`AD_ACCESS_PASSWORD` (blank = the CI Server service account). The manual's *Profile priority* is `USER_DF.MERGE_PRIORITY`; *Directory group* is `DIRECTORY_GROUP` (68 characters). The SSO keytab path is given as `%TLS_WAP_PATH%\webapps\auth\WEB-INF` (§2.5.1) and `%TLS_ALLUSERS_PATH%\wap\webapps\auth\WEB-INF` (§3.4.3) — the same folder on the test system. | closed | Installed software is the reference; documented in the J40 summary §5 and `authorization/tasks/active-directory.md`. Not testable without a domain. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J40-01EN.md`; `.claude/skills/authorization/tasks/active-directory.md` | | ISS-054 | 2026-10-01 | AD (manual vs installed) | IM 36K10J40 vs the installed `dssana.sup`: the *Active Directory* tab has keywords the manual does not describe — `AD_SERVER`, `AD_SERVER_BACKUP` (host[:port], 389/636), `AD_SECURE` (LDAPS; installed `NO`, help says default yes), `AD_ACCESS_USER`/`AD_ACCESS_PASSWORD` (blank = the CI Server service account). The manual's *Profile priority* is `USER_DF.MERGE_PRIORITY`; *Directory group* is `DIRECTORY_GROUP` (68 characters). The SSO keytab path is given as `%TLS_WAP_PATH%\webapps\auth\WEB-INF` (§2.5.1) and `%TLS_ALLUSERS_PATH%\wap\webapps\auth\WEB-INF` (§3.4.3) — the same folder on the test system. | closed | Installed software is the reference; documented in the J40 summary §5 and `authorization/tasks/active-directory.md`. Not testable without a domain. Closed 2026-10-01 (confirmed by user). | `knowledge/manuals/IM36K10J40-01EN.md`; `.claude/skills/authorization/tasks/active-directory.md` |
| ISS-055 | 2026-10-02 | GRAPHICS (Micro Trend) | A Micro Trend written into `CIENG_TrendLab` (`itemName[0..1]` = `TANK1.LEVEL`/`INFLOW`, `numberOfPens` 2, `realTime`, `fillWithHistory`) drew both pens on the desktop and in the browser the first time (about 13:33), then stayed **blank** on every later open on both clients: with and without the 48 spare trend pens, and with explicit `timeRange` 600 / `sampleCount` 60. No console error; CI Server running. Code: `MicroTrend.js` only starts when all properties are set (`startTrendIfAllPropertiesAreSet`; it also compares `scaleMax[i]` with `scaleMin[1]`). | open | Later 2026-10-02 the clean sample file (no explicit `timeRange`/`sampleCount`, 48 spare trend pens) drew both pens on the desktop and in the browser after a fresh login; after a *View > Reload* in the browser only LEVEL showed fully, INFLOW only a short piece: the behaviour is intermittent. Still to try: build the Micro Trend in the Edit Module (compare the XML), connect `itemName[n]` instead of a fixed value (as in factory/test displays), a display with only the Micro Trend, a CI Server restart. | `.claude/skills/graphics/tasks/trend.md` §6; `examples/CI-Eng-Sample/displays/CIENG_TrendLab.xml` |
| ISS-056 | 2026-10-02 | GRAPHICS (trend, manual vs installed) | (1) IM 36K10C50 Table 2.27-28 lists *Appearance - Show in Legend* as supported in the HTML display, but the web legend listed pens with `visibleLegend` false (the desktop hides them). (2) The legend position (`PositionSouthWest`) was not applied in the browser (not supported per the table). (3) The manual says a trend has up to 20 pens; the component property sheet has 20 slots, but the web code reserves 50 and `maximumPens` 50 works on the desktop. (4) Desktop: pen `title`/`titlePlacement`, pen limit values `lowLimit`… and chart `backgroundPaint` had no visible effect; time-axis minor ticks/grid showed nothing at a 10-minute range. | closed | Documented in `trend.md`; installed software is the reference. Close when the user confirms. Closed 2026-10-02 (confirmed by user). | `.claude/skills/graphics/tasks/trend.md` |

View file

@ -3,7 +3,7 @@ manual: IM 36K10C50-01EN
title: Edit Module title: Edit Module
edition: 3rd Edition, Sep. 2023 edition: 3rd Edition, Sep. 2023
version: R1.03 version: R1.03
status: display CIENG_Tank built by the user in the Edit Module (text, number field, alarm overview, trend) and checked as XML and HTML 2026-10-01; jwuiutl search, validate and HTML export verified; other components, symbols, actions and the tutorial from docs status: display CIENG_Tank built by the user in the Edit Module (text, number field, alarm overview, trend) and checked as XML and HTML 2026-10-01; jwuiutl search, validate and HTML export verified; trend settings (§2.27) tested one by one on CIENG_TrendLab 2026-10-02 (skill graphics, tasks/trend.md); other components, symbols, actions and the tutorial from docs
--- ---
# Edit Module (R1.03) # Edit Module (R1.03)
@ -58,7 +58,7 @@ export; dialog tabs Types, Columns, Filter, Alarm link display, Appearance, Head
Fetching, Alarm Shelving, Enterprise, Advanced, Attributes), list of blocked items, alarm Fetching, Alarm Shelving, Enterprise, Advanced, Attributes), list of blocked items, alarm
sound, dataset tables (view/edit dataset records), report, **trend** (pens on items with sound, dataset tables (view/edit dataset records), report, **trend** (pens on items with
history; shows limits; time slider and controls; definitions can be saved from the operator history; shows limits; time slider and controls; definitions can be saved from the operator
interface), DTS trend, micro trend, playback indicator, calculation/function, JavaScript interface; every setting tested in skill `graphics`, `tasks/trend.md`), DTS trend, micro trend, playback indicator, calculation/function, JavaScript
function, web browser, PDF viewer, navigation tree, display generator, map viewer. function, web browser, PDF viewer, navigation tree, display generator, map viewer.
## 4. Sheets (§4) ## 4. Sheets (§4)

View file

@ -86,3 +86,6 @@ property files and language codes (§3.5).
- Full screen F11, Chrome shortcuts or `chrome.exe --app=http://<host>:<port>`. - Full screen F11, Chrome shortcuts or `chrome.exe --app=http://<host>:<port>`.
- **Test system**: the HTML trend of `CIENG_Tank` drew no line although history existed; browser - **Test system**: the HTML trend of `CIENG_Tank` drew no line although history existed; browser
console `Mismatch between number of labels … and number of columns in array (51)` (ISS-041). console `Mismatch between number of labels … and number of columns in array (51)` (ISS-041).
Cause (2026-10-02): the web trend code always builds 50 data columns, so a trend draws only
with 50 visible pens; workaround `add_trend_spares.ps1`, details and web/desktop differences in
skill `graphics`, `tasks/trend.md` §6.

View file

@ -133,6 +133,8 @@ now come before classes and objects (phase 6), and the other interfaces follow a
| C50 | Build a display in the Edit Module, check the XML ([task](../.claude/skills/graphics/tasks/create-display.md)) | passed | passed | User built `CIENG_Tank` (HTML mode): text, number field, alarm overview, trend. File stores item name + id; after a sample reload (id 248 → 268) validation still passed and a new session showed live values. | | C50 | Build a display in the Edit Module, check the XML ([task](../.claude/skills/graphics/tasks/create-display.md)) | passed | passed | User built `CIENG_Tank` (HTML mode): text, number field, alarm overview, trend. File stores item name + id; after a sample reload (id 248 → 268) validation still passed and a new session showed live values. |
| C50/R30 | Deploy/remove, `jwuiutl` HTML export, validate, search; HTML display in the browser ([task](../.claude/skills/graphics/tasks/deploy-displays.md)) | passed | passed | Scripts `displays/deploy_displays.cmd` / `remove_displays.cmd`; command-line HTML identical to the Edit Module's. Number field live in the browser; HTML trend draws no line (ISS-041). Browser page reload ends the session; the display menu *View > Reload* keeps it (user). | | C50/R30 | Deploy/remove, `jwuiutl` HTML export, validate, search; HTML display in the browser ([task](../.claude/skills/graphics/tasks/deploy-displays.md)) | passed | passed | Scripts `displays/deploy_displays.cmd` / `remove_displays.cmd`; command-line HTML identical to the Edit Module's. Number field live in the browser; HTML trend draws no line (ISS-041). Browser page reload ends the session; the display menu *View > Reload* keeps it (user). |
| R30/C50 | Operator layout `CIENG_Operator` (menu, toolbar, navigation/main/banner frames, status line) added with `layout.ps1`; navigation display `CIENG_Menu`; open displays in frames, layouts and the `popup` layout ([task](../.claude/skills/graphics/tasks/layouts.md)) | passed | passed | Desktop: second 1600 x 900 window, frame navigation and Back, popup on top and minimised with its parent, F11 within taskbar limits; the Operator Interface must be restarted after `Layouts.xml` changes; factory `default` layout unchanged for Admin. Web: `?d=CIENG_Tank&l=CIENG_Operator`. Status line/command names not in the readme (ISS-042). A stray trend property connection caused a desktop error (ISS-041 update). | | R30/C50 | Operator layout `CIENG_Operator` (menu, toolbar, navigation/main/banner frames, status line) added with `layout.ps1`; navigation display `CIENG_Menu`; open displays in frames, layouts and the `popup` layout ([task](../.claude/skills/graphics/tasks/layouts.md)) | passed | passed | Desktop: second 1600 x 900 window, frame navigation and Back, popup on top and minimised with its parent, F11 within taskbar limits; the Operator Interface must be restarted after `Layouts.xml` changes; factory `default` layout unchanged for Admin. Web: `?d=CIENG_Tank&l=CIENG_Operator`. Status line/command names not in the readme (ISS-042). A stray trend property connection caused a desktop error (ISS-041 update). |
| C50/R30 | Trend settings one by one on `CIENG_TrendLab` (pen source, type, scale, axis, grid, limits; time range, performance, appearance, time axis, legend, pen panel; property sheet listed) ([task](../.claude/skills/graphics/tasks/trend.md)) | passed (desktop) | passed | 2026-10-02, user confirmed each round with screenshots. Pen limits, pen title and `backgroundPaint` had no effect (ISS-056). Internal items need `trend_feed.ps1` after a restart. |
| C50/R30 | HTML trend: cause of the empty web trend and 50-pen workaround (`add_trend_spares.ps1`); Micro Trend ([task](../.claude/skills/graphics/tasks/trend.md) §6) | passed (workaround) | passed | Web code always builds 50 columns (ISS-041). Padded `CIENG_TrendLab` draws in the browser with a clean legend; web ignores *Show in legend* (ISS-056). Micro Trend drew once, then blank (ISS-055). |
| J10/C50 | Restart CI Server with the Edit Module open | observed | n/a | Start aborted: `JWUIGED<pid>` still attached to the BUS Service (`ci_start.log`); closing the Edit Module fixed it (skill `system-check`). | | J10/C50 | Restart CI Server with the Edit Module open | observed | n/a | Start aborted: `JWUIGED<pid>` still attached to the BUS Service (`ci_start.log`); closing the Edit Module fixed it (skill `system-check`). |
| R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. | | R30/C50/C60 | Dataset forms, symbols, AOG library, dual screen, per-user layouts | not practiced | n/a | GUI work; user profiles not changed. |
| R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). | | R40/C30 | REPORT Service checks: processes, set-up files (`rptman.sup`, `rptge1.rpt`, `rptgen.rpt`), system reports, `rptstp` ([task](../.claude/skills/reporting/tasks/report-checks.md)) | passed | n/a | Read-only plus one cancel: `rptstp rptge1` stopped the endless-loop test report `CIENG_LOOP` (removed). 28 system reports; two names differ from the manual (ISS-043). |