10 KiB
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.INFLOWare internal items: after a CI Server start they areNOT 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 rundisplays/trend_feed.ps1(writes sine waves withitmvalevery 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; factoryTemplate1..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>[&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 & 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 () 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; consoleMismatch 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 (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]; elementsnumberOfPens,realTime,fillWithHistory,timeRange(s, default 300),sampleCount(default 300)): drew on desktop and web the first time, then stayed blank on every later open (ISS-055, open).