Phase 10: Graphic Display Setup, Edit Module, Advanced Operating Graphics #10
4 changed files with 677 additions and 164 deletions
|
|
@ -1,164 +1,173 @@
|
||||||
# CI-Eng-Sample
|
# CI-Eng-Sample
|
||||||
|
|
||||||
A small, invented sample project that anyone with this repo can load into a CI Server
|
A small, invented sample project that anyone with this repo can load into a CI Server
|
||||||
**R1.03** test system. Skills use its names in their examples, and every skill task is
|
**R1.03** test system. Skills use its names in their examples, and every skill task is
|
||||||
re-tested against it so that no other project is needed.
|
re-tested against it so that no other project is needed.
|
||||||
|
|
||||||
Built and tested on CI Server R1.03.00 (unlicensed test system), 2026-09-30.
|
Built and tested on CI Server R1.03.00 (unlicensed test system), 2026-09-30.
|
||||||
|
|
||||||
## Load and remove
|
## Load and remove
|
||||||
|
|
||||||
Test systems only: loading writes to the CI Server database. CI Server must be running.
|
Test systems only: loading writes to the CI Server database. CI Server must be running.
|
||||||
From an elevated prompt, call the scripts by full path (a bare `load.cmd` may not be found
|
From an elevated prompt, call the scripts by full path (a bare `load.cmd` may not be found
|
||||||
from the current folder):
|
from the current folder):
|
||||||
|
|
||||||
```
|
```
|
||||||
cmd /c "<repo>\examples\CI-Eng-Sample\load.cmd"
|
cmd /c "<repo>\examples\CI-Eng-Sample\load.cmd"
|
||||||
cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
|
||||||
```
|
```
|
||||||
|
|
||||||
- Each step prints a summary and writes a `.qlo` listing; check that `Errors` is 0.
|
- Each step prints a summary and writes a `.qlo` listing; check that `Errors` is 0.
|
||||||
- **Restart CI Server after loading** (stop, then start the CI Service): a new storage group
|
- **Restart CI Server after loading** (stop, then start the CI Service): a new storage group
|
||||||
stores no history until CI Server restarts.
|
stores no history until CI Server restarts.
|
||||||
- `load.cmd` on a system that already has the project reports `Exists` and changes nothing.
|
- `load.cmd` on a system that already has the project reports `Exists` and changes nothing.
|
||||||
- `remove.cmd` takes about 1½ minutes: a storage group can only be deleted after its stop time
|
- `remove.cmd` takes about 1½ minutes: a storage group can only be deleted after its stop time
|
||||||
has passed, so the script sets a stop time one minute ahead and waits. Removing the group
|
has passed, so the script sets a stop time one minute ahead and waits. Removing the group
|
||||||
also deletes its history.
|
also deletes its history.
|
||||||
|
|
||||||
## Current contents
|
## Current contents
|
||||||
|
|
||||||
| Name | Kind | Details |
|
| Name | Kind | Details |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `CI-Eng-Sample` | Section | Top level |
|
| `CI-Eng-Sample` | Section | Top level |
|
||||||
| `CI-Eng-Sample.TANK1`, `.PUMP1`, `.SYSTEM` | Sections | Tank, pump, system monitoring |
|
| `CI-Eng-Sample.TANK1`, `.PUMP1`, `.SYSTEM` | Sections | Tank, pump, system monitoring |
|
||||||
| `CI-Eng-Sample.TANK1.LEVEL` | Item, Real | %, format `999.9`, limits LL 10 / L 20 / H 80 / HH 90, scale 0–100, stored in `CIENG_EVENT`; alarming on (ack type `CIENG_ACK`, area `CIENG_TANKS`; `16_item_alarm_df.qli`) |
|
| `CI-Eng-Sample.TANK1.LEVEL` | Item, Real | %, format `999.9`, limits LL 10 / L 20 / H 80 / HH 90, scale 0–100, stored in `CIENG_EVENT`; alarming on (ack type `CIENG_ACK`, area `CIENG_TANKS`; `16_item_alarm_df.qli`) |
|
||||||
| `CI-Eng-Sample.TANK1.INFLOW` | Item, Real | m3/h, format `9999.9`, scale 0–500, stored in `CIENG_EVENT` |
|
| `CI-Eng-Sample.TANK1.INFLOW` | Item, Real | m3/h, format `9999.9`, scale 0–500, stored in `CIENG_EVENT` |
|
||||||
| `CI-Eng-Sample.PUMP1.RUNNING` | Item, Boolean | |
|
| `CI-Eng-Sample.PUMP1.RUNNING` | Item, Boolean | |
|
||||||
| `CI-Eng-Sample.PUMP1.MODE` | Item, Integer | 0 manual, 1 auto |
|
| `CI-Eng-Sample.PUMP1.MODE` | Item, Integer | 0 manual, 1 auto |
|
||||||
| `CI-Eng-Sample.SYSTEM.CPU_LOAD` | Item, Real | Target for `intcpumon` |
|
| `CI-Eng-Sample.SYSTEM.CPU_LOAD` | Item, Real | Target for `intcpumon` |
|
||||||
| `CI-Eng-Sample.SYSTEM.DISK_C` | Item, Real | Target for `intdskmon` (reports **used** %) |
|
| `CI-Eng-Sample.SYSTEM.DISK_C` | Item, Real | Target for `intdskmon` (reports **used** %) |
|
||||||
| `CI-Eng-Sample.SYSTEM.PING_LOCALHOST` | Item, Integer | Target for `inttcpmon` (1 = reachable) |
|
| `CI-Eng-Sample.SYSTEM.PING_LOCALHOST` | Item, Integer | Target for `inttcpmon` (1 = reachable) |
|
||||||
| `CI-Eng-Sample.SYSTEM.PROC_ALM` | Item, Integer | Target for `intmon` (1 = `alm` process running) |
|
| `CI-Eng-Sample.SYSTEM.PROC_ALM` | Item, Integer | Target for `intmon` (1 = `alm` process running) |
|
||||||
| `CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS` | Sub-item, Integrator | Running time in seconds (adds value × integration granule, `itm_int_secs` in `itm.sup`, default 1 s) |
|
| `CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDS` | Sub-item, Integrator | Running time in seconds (adds value × integration granule, `itm_int_secs` in `itm.sup`, default 1 s) |
|
||||||
| `CI-Eng-Sample.TANK1.LEVEL.MAX` | Sub-item, Min-Max | Highest level seen |
|
| `CI-Eng-Sample.TANK1.LEVEL.MAX` | Sub-item, Min-Max | Highest level seen |
|
||||||
| `CI-Eng-Sample.DEMO` | Section | Tutorial examples |
|
| `CI-Eng-Sample.DEMO` | Section | Tutorial examples |
|
||||||
| `CI-Eng-Sample.DEMO.COUNTER` | Item, Integer | Counts 1…100, one step per second, written by `DEMO.INCR1` |
|
| `CI-Eng-Sample.DEMO.COUNTER` | Item, Integer | Counts 1…100, one step per second, written by `DEMO.INCR1` |
|
||||||
| `CIENG_1S` | Trigger group | Every second |
|
| `CIENG_1S` | Trigger group | Every second |
|
||||||
| `CIENG_INCR` | Class (traditional) | Increments `DEMO.COUNTER`, wraps at 100; compiled on load |
|
| `CIENG_INCR` | Class (traditional) | Increments `DEMO.COUNTER`, wraps at 100; compiled on load |
|
||||||
| `CI-Eng-Sample.DEMO.INCR1` | Object | Instance of `CIENG_INCR` |
|
| `CI-Eng-Sample.DEMO.INCR1` | Object | Instance of `CIENG_INCR` |
|
||||||
| `CI-Eng-Sample.TEMPLATES` | Section | Template items for classes |
|
| `CI-Eng-Sample.TEMPLATES` | Section | Template items for classes |
|
||||||
| `CI-Eng-Sample.TEMPLATES.TPL_REAL` | Item, Real | Template for items that objects create (format `9999.9`, scale 0–1000) |
|
| `CI-Eng-Sample.TEMPLATES.TPL_REAL` | Item, Real | Template for items that objects create (format `9999.9`, scale 0–1000) |
|
||||||
| `CIENG_TANK` | Class (traditional) | Prompt *Tank capacity (m3)*; signal `LEVEL` = `<object section>.LEVEL` (trigger on value); creates `<object>.VOLUME` from `TPL_REAL`; volume = level × capacity / 100; logs when the level crosses 80; refuses capacity ≤ 0 |
|
| `CIENG_TANK` | Class (traditional) | Prompt *Tank capacity (m3)*; signal `LEVEL` = `<object section>.LEVEL` (trigger on value); creates `<object>.VOLUME` from `TPL_REAL`; volume = level × capacity / 100; logs when the level crosses 80; refuses capacity ≤ 0 |
|
||||||
| `CI-Eng-Sample.TANK1.CALC` | Object | `CIENG_TANK`, capacity 200; creates section `TANK1.CALC` and item `TANK1.CALC.VOLUME` |
|
| `CI-Eng-Sample.TANK1.CALC` | Object | `CIENG_TANK`, capacity 200; creates section `TANK1.CALC` and item `TANK1.CALC.VOLUME` |
|
||||||
| `CIENG_JFLOW` | Class (Java) | Attaches `<object section>.INFLOW`; creates `<object>.sPerMin` = inflow / 60; logs each change |
|
| `CIENG_JFLOW` | Class (Java) | Attaches `<object section>.INFLOW`; creates `<object>.sPerMin` = inflow / 60; logs each change |
|
||||||
| `CI-Eng-Sample.TANK1.JFLOW` | Object | `CIENG_JFLOW`; creates item `TANK1.JFLOW.sPerMin` (mixed case, as the Java identifier) |
|
| `CI-Eng-Sample.TANK1.JFLOW` | Object | `CIENG_JFLOW`; creates item `TANK1.JFLOW.sPerMin` (mixed case, as the Java identifier) |
|
||||||
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
| `CIENG_EVENT` | Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
|
||||||
| `CIENG_SCAN10S` | Item storage group | Scan/Time every 10 s with quality, priority 10 (source for aggregation), lifetime 1 day, rollover 1 hour; `TANK1.LEVEL`, `TANK1.INFLOW` |
|
| `CIENG_SCAN10S` | Item storage group | Scan/Time every 10 s with quality, priority 10 (source for aggregation), lifetime 1 day, rollover 1 hour; `TANK1.LEVEL`, `TANK1.INFLOW` |
|
||||||
| `CIENG_AGG` | Item storage group | Aggregation 30 min + hourly, lifetime 4 weeks, rollover 1 week; `TANK1.LEVEL` max/min/average (read with `INTERPOLATION = "30Minutes"` / `"Hour"`, `ATTRIBUTE = "Maximum"` …) |
|
| `CIENG_AGG` | Item storage group | Aggregation 30 min + hourly, lifetime 4 weeks, rollover 1 week; `TANK1.LEVEL` max/min/average (read with `INTERPOLATION = "30Minutes"` / `"Hour"`, `ATTRIBUTE = "Maximum"` …) |
|
||||||
| `CI-Eng-Sample.PLC1` | Section | Modbus loopback station |
|
| `CI-Eng-Sample.PLC1` | Section | Modbus loopback station |
|
||||||
| `CI-Eng-Sample.PLC1.COMM_OK` | Item, Boolean | Status item of station `CIENG_PLC` (1 = communicating, status 22 when off-scan) |
|
| `CI-Eng-Sample.PLC1.COMM_OK` | Item, Boolean | Status item of station `CIENG_PLC` (1 = communicating, status 22 when off-scan) |
|
||||||
| `CI-Eng-Sample.PLC1.SETPOINT` / `.READBACK` | Items, Integer | Written to holding register 1 (`RO:1`) / read from input register 1 (`RI:1`), same memory |
|
| `CI-Eng-Sample.PLC1.SETPOINT` / `.READBACK` | Items, Integer | Written to holding register 1 (`RO:1`) / read from input register 1 (`RI:1`), same memory |
|
||||||
| `CI-Eng-Sample.PLC1.CMD` / `.FEEDBACK` | Items, Boolean | Written to coil 1 (`DO:1`) / read from input bit 1 (`DI:1`), same memory |
|
| `CI-Eng-Sample.PLC1.CMD` / `.FEEDBACK` | Items, Boolean | Written to coil 1 (`DO:1`) / read from input bit 1 (`DI:1`), same memory |
|
||||||
| `CIENG_MB_LINE` | Modbus line (TCP/IP) | Equipment manager `EQPCIENG` (created and started by loading the line) |
|
| `CIENG_MB_LINE` | Modbus line (TCP/IP) | Equipment manager `EQPCIENG` (created and started by loading the line) |
|
||||||
| `CIENG_PLC` | Modbus station | Open Modbus/TCP to `localhost:5020`, unit 1, output method *On change and connect* |
|
| `CIENG_PLC` | Modbus station | Open Modbus/TCP to `localhost:5020`, unit 1, output method *On change and connect* |
|
||||||
| `CIENG_SCAN1S` | Modbus scan type | 1000 ms |
|
| `CIENG_SCAN1S` | Modbus scan type | 1000 ms |
|
||||||
| `CI-Eng-Sample.UA` | Section | OPC UA loopback station |
|
| `CI-Eng-Sample.UA` | Section | OPC UA loopback station |
|
||||||
| `CI-Eng-Sample.UA.COMM_OK` | Item, Boolean | Status item of station `CIENG_UA` (1 = connected) |
|
| `CI-Eng-Sample.UA.COMM_OK` | Item, Boolean | Status item of station `CIENG_UA` (1 = connected) |
|
||||||
| `CI-Eng-Sample.UA.LEVEL_COPY` | Item, Real | `TANK1.LEVEL` read back through CI Server's own OPC UA server |
|
| `CI-Eng-Sample.UA.LEVEL_COPY` | Item, Real | `TANK1.LEVEL` read back through CI Server's own OPC UA server |
|
||||||
| `CI-Eng-Sample.UA.SRV_STATE` | Item, Integer | OPC UA server state node (ns 0, i=2259), 0 = Running |
|
| `CI-Eng-Sample.UA.SRV_STATE` | Item, Integer | OPC UA server state node (ns 0, i=2259), 0 = Running |
|
||||||
| `CIENG_UA_LINE` | OPC UA client line | Client process `OPXCIENG` (created and started by loading the line) |
|
| `CIENG_UA_LINE` | OPC UA client line | Client process `OPXCIENG` (created and started by loading the line) |
|
||||||
| `CIENG_UA` | OPC UA station | `opc.tcp://localhost:34493`, Basic256Sha256 / SignAndEncrypt, anonymous; subscription `CIENG_SUB` (1 s); points `LEVEL`, `SRV_STATE` |
|
| `CIENG_UA` | OPC UA station | `opc.tcp://localhost:34493`, Basic256Sha256 / SignAndEncrypt, anonymous; subscription `CIENG_SUB` (1 s); points `LEVEL`, `SRV_STATE` |
|
||||||
| OPC visible | Flags | Sections `CI-Eng-Sample`, `TANK1` and item `TANK1.LEVEL` are OPC visible, item read-only (`12_opc_visible_df.qli`) |
|
| OPC visible | Flags | Sections `CI-Eng-Sample`, `TANK1` and item `TANK1.LEVEL` are OPC visible, item read-only (`12_opc_visible_df.qli`) |
|
||||||
| `CIENG_ACK` | Acknowledgement type | Every alarm needs an acknowledgement; return to normal automatic only if the alarm was acknowledged (same matrix as `MANUAL`) |
|
| `CIENG_ACK` | Acknowledgement type | Every alarm needs an acknowledgement; return to normal automatic only if the alarm was acknowledged (same matrix as `MANUAL`) |
|
||||||
| `CIENG_TANKS` | Area of interest | Label for tank items (`TANK1.LEVEL` `AOI_1`) |
|
| `CIENG_TANKS` | Area of interest | Label for tank items (`TANK1.LEVEL` `AOI_1`) |
|
||||||
| `CIENG_TANK1` | Alarm selection area | `SECTION = "CI-Eng-Sample.TANK1"`, compiled on load |
|
| `CIENG_TANK1` | Alarm selection area | `SECTION = "CI-Eng-Sample.TANK1"`, compiled on load |
|
||||||
| `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. |
|
| `CIENG_VIEWER` | Authorization group | Read-only: `ITEM_READ`, `SECTION_READ`, `ALARM_CURRENT_READ`, `ALARM_CHRONO_READ`. No users are created by the sample. |
|
||||||
|
|
||||||
Items created by objects (`TANK1.CALC.VOLUME`, `TANK1.JFLOW.sPerMin`) and their sections are
|
Items created by objects (`TANK1.CALC.VOLUME`, `TANK1.JFLOW.sPerMin`) and their sections are
|
||||||
deleted with the objects; they are not in `02_item_df.qli`.
|
deleted with the objects; they are not in `02_item_df.qli`.
|
||||||
|
|
||||||
All items except `PLC1.*` are internal (no station). The `PLC1` station talks to CI Server's own Modbus slave mirror (see below), so no PLC is needed either.
|
All items except `PLC1.*` are internal (no station). The `PLC1` station talks to CI Server's own Modbus slave mirror (see below), so no PLC is needed either.
|
||||||
New items start with status 13 (`NOT INIT`) until a value is written.
|
New items start with status 13 (`NOT INIT`) until a value is written.
|
||||||
|
|
||||||
## Files
|
## Files
|
||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `01_section_df.qli` | Sections (`SECTION_DF`); parents before children |
|
| `01_section_df.qli` | Sections (`SECTION_DF`); parents before children |
|
||||||
| `02_item_df.qli` | Items (`ITEM_DF`) |
|
| `02_item_df.qli` | Items (`ITEM_DF`) |
|
||||||
| `02b_sub_item_df.qli` | Sub-items (`SUB_ITEM_DF`) |
|
| `02b_sub_item_df.qli` | Sub-items (`SUB_ITEM_DF`) |
|
||||||
| `03_his_group_df.qli` | Item storage groups (`HIS_GROUP_DF`): event, scan, aggregation |
|
| `03_his_group_df.qli` | Item storage groups (`HIS_GROUP_DF`): event, scan, aggregation |
|
||||||
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
|
| `04_item_his_df.qli` | Items in the storage group (`ITEM_HIS_DF`, name `<group>:<item>`) |
|
||||||
| `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group; classes (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1; Traditional and Java); objects (`ATTR_VALUE_1` = prompt answer) |
|
| `05_trigger_df.qli`, `06_class_df.qli`, `07_object_df.qli` | Trigger group; classes (source in the `METHOD` memo, `@"` … `"@`, `COMPILE` 1; Traditional and Java); objects (`ATTR_VALUE_1` = prompt answer) |
|
||||||
| `08_auth_group_df.qli` | Authorization group (`AUTH_GROUP_DF`) |
|
| `08_auth_group_df.qli` | Authorization group (`AUTH_GROUP_DF`) |
|
||||||
| `09_modbus_line_df.qli`, `10_modbus_station_df.qli`, `11_item_eqp_df.qli` | Modbus line; station, scan type, points; items connected to points |
|
| `09_modbus_line_df.qli`, `10_modbus_station_df.qli`, `11_item_eqp_df.qli` | Modbus line; station, scan type, points; items connected to points |
|
||||||
| `12_opc_visible_df.qli` | OPC visible / read flags (loaded with `dssqld -m`) |
|
| `12_opc_visible_df.qli` | OPC visible / read flags (loaded with `dssqld -m`) |
|
||||||
| `13_opcua_line_df.qli`, `14_opcua_station_df.qli`, `15_item_opcua_df.qli` | OPC UA client line; station, subscription, points; connected items |
|
| `13_opcua_line_df.qli`, `14_opcua_station_df.qli`, `15_item_opcua_df.qli` | OPC UA client line; station, subscription, points; connected items |
|
||||||
| `01b_alarm_df.qli` | Alarm definitions: acknowledgement type, area of interest, alarm selection area (`ALARM_ACK_DF`, `ALARM_AOI_DF`, `ALARM_ASA_DF`) |
|
| `01b_alarm_df.qli` | Alarm definitions: acknowledgement type, area of interest, alarm selection area (`ALARM_ACK_DF`, `ALARM_AOI_DF`, `ALARM_ASA_DF`) |
|
||||||
| `16_item_alarm_df.qli` | Switch on alarming for `TANK1.LEVEL` (loaded with `dssqld -m`) |
|
| `16_item_alarm_df.qli` | Switch on alarming for `TANK1.LEVEL` (loaded with `dssqld -m`) |
|
||||||
| `equipment/eqpciengslv_start.cmd`, `_stop.cmd` | Start/stop the Modbus slave mirror (copy to `tls\com`) |
|
| `equipment/eqpciengslv_start.cmd`, `_stop.cmd` | Start/stop the Modbus slave mirror (copy to `tls\com`) |
|
||||||
| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) |
|
| `76_`…`93_remove_*.qli` | Names to delete, in reverse order (alarm definitions last, `93`) |
|
||||||
| `load.cmd`, `remove.cmd` | Run the steps in the right order |
|
| `load.cmd`, `remove.cmd` | Run the steps in the right order |
|
||||||
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
|
| `displays/CIENG_Tank.xml` | Display (HTML mode): title, number field on `TANK1.LEVEL`, alarm overview, trend of `TANK1.LEVEL` |
|
||||||
|
| `displays/deploy_displays.cmd`, `remove_displays.cmd` | Copy the display into the operator interface and export its HTML version / delete both |
|
||||||
## Modbus slave mirror (for station CIENG_PLC)
|
| `monitoring/*.sup.txt` | Setup-file lines for the monitoring processes (not applied by `load.cmd`) |
|
||||||
|
|
||||||
`CIENG_PLC` reads and writes CI Server's own Modbus slave: `eqpmdcmem` (slave memory) and
|
## Modbus slave mirror (for station CIENG_PLC)
|
||||||
`eqpmdcslvtcp` (Modbus TCP on port 5020). Without them the station reports bad communication
|
|
||||||
(`COMM_OK` = 0) but everything loads. To start them with CI Server, an administrator copies
|
`CIENG_PLC` reads and writes CI Server's own Modbus slave: `eqpmdcmem` (slave memory) and
|
||||||
`equipment/eqpciengslv_start.cmd` and `eqpciengslv_stop.cmd` to `%TLS_ROOT_PATH%\tls\com`;
|
`eqpmdcslvtcp` (Modbus TCP on port 5020). Without them the station reports bad communication
|
||||||
for a quick test they can also be started by hand from a normal prompt:
|
(`COMM_OK` = 0) but everything loads. To start them with CI Server, an administrator copies
|
||||||
|
`equipment/eqpciengslv_start.cmd` and `eqpciengslv_stop.cmd` to `%TLS_ROOT_PATH%\tls\com`;
|
||||||
```
|
for a quick test they can also be started by hand from a normal prompt:
|
||||||
start eqpmdcmem -n EQPMDCMEM
|
|
||||||
start eqpmdcslvtcp -n EQPMDCSLVTCP -p 5020
|
```
|
||||||
```
|
start eqpmdcmem -n EQPMDCMEM
|
||||||
|
start eqpmdcslvtcp -n EQPMDCSLVTCP -p 5020
|
||||||
Remove the two files from `tls\com` when the sample is removed. See skill `equipment`, task
|
```
|
||||||
`modbus-station.md`.
|
|
||||||
|
Remove the two files from `tls\com` when the sample is removed. See skill `equipment`, task
|
||||||
## OPC UA loopback (station CIENG_UA)
|
`modbus-station.md`.
|
||||||
|
|
||||||
`CIENG_UA` is CI Server's OPC UA client connected to CI Server's own OPC UA server, so no
|
## OPC UA loopback (station CIENG_UA)
|
||||||
external server is needed. The **first** connection on a system needs a one-time certificate
|
|
||||||
exchange, done by the user (skill `data-access`, task `opcua-client.md` §4):
|
`CIENG_UA` is CI Server's OPC UA client connected to CI Server's own OPC UA server, so no
|
||||||
|
external server is needed. The **first** connection on a system needs a one-time certificate
|
||||||
1. After loading, the client logs `OPXC-E-CER_NO_TRU`; trust the server certificate in
|
exchange, done by the user (skill `data-access`, task `opcua-client.md` §4):
|
||||||
`%TLS_ALLUSERS_PATH%\pki\opxuac\pkiclient\rejected` (Engineering Module, or move it to
|
|
||||||
`…\pkiclient\trusted\certs`).
|
1. After loading, the client logs `OPXC-E-CER_NO_TRU`; trust the server certificate in
|
||||||
2. The server then rejects the client; move `CI_SERVER_OPCUA_CLIENT_OPXCIENG […].der` from
|
`%TLS_ALLUSERS_PATH%\pki\opxuac\pkiclient\rejected` (Engineering Module, or move it to
|
||||||
`%TLS_ALLUSERS_PATH%\pki\opxuas\pkiserver\rejected` to `…\pkiserver\trusted\certs`
|
`…\pkiclient\trusted\certs`).
|
||||||
(PowerShell: `Move-Item -LiteralPath`, the name contains brackets).
|
2. The server then rejects the client; move `CI_SERVER_OPCUA_CLIENT_OPXCIENG […].der` from
|
||||||
|
`%TLS_ALLUSERS_PATH%\pki\opxuas\pkiserver\rejected` to `…\pkiserver\trusted\certs`
|
||||||
Then `UA.COMM_OK` = 1 and `UA.LEVEL_COPY` follows `TANK1.LEVEL`. The trust is kept when the
|
(PowerShell: `Move-Item -LiteralPath`, the name contains brackets).
|
||||||
sample is removed and loaded again.
|
|
||||||
|
Then `UA.COMM_OK` = 1 and `UA.LEVEL_COPY` follows `TANK1.LEVEL`. The trust is kept when the
|
||||||
## Alarms (TANK1.LEVEL)
|
sample is removed and loaded again.
|
||||||
|
|
||||||
`TANK1.LEVEL` raises HIGH above 80 (Alarm 2, priority 2) and HIGH HIGH above 90 (Alarm 3,
|
## Alarms (TANK1.LEVEL)
|
||||||
priority 1). To try it on a test system: `itmval -p -n CI-Eng-Sample.TANK1.LEVEL -v 85`, export
|
|
||||||
`ALARM_CURRENT` (filter on `ITEM_NAME`), acknowledge with `dssqld -m` on `ALARM_CURRENT`
|
`TANK1.LEVEL` raises HIGH above 80 (Alarm 2, priority 2) and HIGH HIGH above 90 (Alarm 3,
|
||||||
(`NAME`, `ACK` 1), write the level back below 80. See skill `alarm-management`, task
|
priority 1). To try it on a test system: `itmval -p -n CI-Eng-Sample.TANK1.LEVEL -v 85`, export
|
||||||
`item-alarming.md`.
|
`ALARM_CURRENT` (filter on `ITEM_NAME`), acknowledge with `dssqld -m` on `ALARM_CURRENT`
|
||||||
|
(`NAME`, `ACK` 1), write the level back below 80. See skill `alarm-management`, task
|
||||||
## Monitoring processes (optional)
|
`item-alarming.md`.
|
||||||
|
|
||||||
`monitoring/` holds the lines to add to the setup files in `%TLS_ROOT_PATH%\tls\sup\` so that
|
## Display (optional)
|
||||||
`intcpumon`, `intdskmon`, `inttcpmon`, `intmon` and `intspawn` write into the `SYSTEM` items.
|
|
||||||
These change the system's own setup files: back the files up first and restore them after
|
After `load.cmd`, run `displays\deploy_displays.cmd` (no admin rights) and open
|
||||||
testing. See the `system-management` skill, task `monitoring-processes.md`.
|
`http://localhost:8080/mobileoperator/?d=CIENG_Tank` (CI Server login), or open `CIENG_Tank` in
|
||||||
|
CI View / the Edit Module. `displays
emove_displays.cmd` deletes it again. See skill
|
||||||
## Planned additions
|
`graphics`.
|
||||||
|
|
||||||
| Phase | Adds |
|
## Monitoring processes (optional)
|
||||||
|---|---|
|
|
||||||
| 10 | A display and symbol |
|
`monitoring/` holds the lines to add to the setup files in `%TLS_ROOT_PATH%\tls\sup\` so that
|
||||||
| 11 | A report |
|
`intcpumon`, `intdskmon`, `inttcpmon`, `intmon` and `intspawn` write into the `SYSTEM` items.
|
||||||
|
These change the system's own setup files: back the files up first and restore them after
|
||||||
## Rules
|
testing. See the `system-management` skill, task `monitoring-processes.md`.
|
||||||
|
|
||||||
- Test systems only; invented names only, no real plant or customer data.
|
## Planned additions
|
||||||
- Keep the load order: sections → template items → classes (compiled) → objects → other
|
|
||||||
items → storage groups → items in storage groups (IM 36K10J10 §5.6). Keep `remove.cmd` in
|
| Phase | Adds |
|
||||||
reverse order.
|
|---|---|
|
||||||
- Every file notes the CI Server version it was built and tested on.
|
| 10 | A symbol (the display `CIENG_Tank` exists) |
|
||||||
|
| 11 | A report |
|
||||||
|
|
||||||
|
## Rules
|
||||||
|
|
||||||
|
- Test systems only; invented names only, no real plant or customer data.
|
||||||
|
- Keep the load order: sections → template items → classes (compiled) → objects → other
|
||||||
|
items → storage groups → items in storage groups (IM 36K10J10 §5.6). Keep `remove.cmd` in
|
||||||
|
reverse order.
|
||||||
|
- Every file notes the CI Server version it was built and tested on.
|
||||||
|
|
|
||||||
487
examples/CI-Eng-Sample/displays/CIENG_Tank.xml
Normal file
487
examples/CI-Eng-Sample/displays/CIENG_Tank.xml
Normal file
|
|
@ -0,0 +1,487 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<visualization protocolVersion="1.3.0.0">
|
||||||
|
<globalSection/>
|
||||||
|
<coreObjectDefinition type="displayDefinition">
|
||||||
|
<version type="version" value="1.3.0.0"/>
|
||||||
|
<html>true</html>
|
||||||
|
<width>1984</width>
|
||||||
|
<height>760</height>
|
||||||
|
<referenceCheck>4</referenceCheck>
|
||||||
|
<defaultBgColor type="colorSet" r="255" g="255" b="255"/>
|
||||||
|
<defaultFgColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<defaultFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
<defaultStroke type="stroke" width="1.0"/>
|
||||||
|
<grid type="grid" gridVisible="true" snappingActive="true" verticalSnapInterval="8" horizontalSnapInterval="8" onTop="false">
|
||||||
|
<color type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
</grid>
|
||||||
|
<revisionHistory type="revisionHistory">
|
||||||
|
<revision type="revision" who="ADMIN" when="2026.10.01 14:29:31.493 AEST" what="Created" where="PXiSEDev"/>
|
||||||
|
</revisionHistory>
|
||||||
|
<blinkDelay>500</blinkDelay>
|
||||||
|
<blinkEnabled>true</blinkEnabled>
|
||||||
|
<mousePassThrough>false</mousePassThrough>
|
||||||
|
<visibilityGroup type="componentData">
|
||||||
|
<htmlId>2</htmlId>
|
||||||
|
<name>Overview</name>
|
||||||
|
<description>Always shown</description>
|
||||||
|
<minimumZoomEnabled>true</minimumZoomEnabled>
|
||||||
|
<minimumZoomFactor>10.0</minimumZoomFactor>
|
||||||
|
</visibilityGroup>
|
||||||
|
<visibilityGroup type="componentData">
|
||||||
|
<htmlId>3</htmlId>
|
||||||
|
<name>Rough</name>
|
||||||
|
<description>Shown when viewing viewing a large area</description>
|
||||||
|
<minimumZoomEnabled>true</minimumZoomEnabled>
|
||||||
|
<minimumZoomFactor>25.0</minimumZoomFactor>
|
||||||
|
</visibilityGroup>
|
||||||
|
<visibilityGroup type="componentData">
|
||||||
|
<htmlId>4</htmlId>
|
||||||
|
<name>Standard</name>
|
||||||
|
<description>Shown when using the default view setting</description>
|
||||||
|
<minimumZoomEnabled>true</minimumZoomEnabled>
|
||||||
|
<minimumZoomFactor>100.0</minimumZoomFactor>
|
||||||
|
</visibilityGroup>
|
||||||
|
<visibilityGroup type="componentData">
|
||||||
|
<htmlId>5</htmlId>
|
||||||
|
<name>Detail</name>
|
||||||
|
<description>Shown only when viewing a small area</description>
|
||||||
|
<minimumZoomEnabled>true</minimumZoomEnabled>
|
||||||
|
<minimumZoomFactor>400.0</minimumZoomFactor>
|
||||||
|
</visibilityGroup>
|
||||||
|
<visibilityGroup type="componentData">
|
||||||
|
<htmlId>6</htmlId>
|
||||||
|
<name>Intricacies</name>
|
||||||
|
<description>Shown only when viewing a very small area</description>
|
||||||
|
<minimumZoomEnabled>true</minimumZoomEnabled>
|
||||||
|
<minimumZoomFactor>1000.0</minimumZoomFactor>
|
||||||
|
</visibilityGroup>
|
||||||
|
<visualizationLayer type="componentData">
|
||||||
|
<htmlId>1</htmlId>
|
||||||
|
<name>Layer1</name>
|
||||||
|
</visualizationLayer>
|
||||||
|
<componentCountHint>4</componentCountHint>
|
||||||
|
<text type="componentData">
|
||||||
|
<htmlId>7</htmlId>
|
||||||
|
<value>CI-Eng-Sample Tank 1</value>
|
||||||
|
<stroke type="stroke" width="1.0"/>
|
||||||
|
<keepOriginalSize>true</keepOriginalSize>
|
||||||
|
<x>124.734375</x>
|
||||||
|
<y>36.953125</y>
|
||||||
|
<top>5.3125</top>
|
||||||
|
<bottom>5.3125</bottom>
|
||||||
|
<left>52.375</left>
|
||||||
|
<right>52.375</right>
|
||||||
|
<rotation>0.0</rotation>
|
||||||
|
<shear>0.0</shear>
|
||||||
|
</text>
|
||||||
|
<numberField type="componentData" x="120.0" y="120.0" top="16.0" bottom="16.0" left="40.0" right="40.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>8</htmlId>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionConnectTo">
|
||||||
|
<property type="property" name="numberField.value"/>
|
||||||
|
<filter type="filter">
|
||||||
|
<value>0.0</value>
|
||||||
|
</filter>
|
||||||
|
<connection type="connection">
|
||||||
|
<itemName>CI-Eng-Sample.TANK1.LEVEL</itemName>
|
||||||
|
<itemId>1.1.268.0.0.1.1.7</itemId>
|
||||||
|
<itemAttribute>ItemValue</itemAttribute>
|
||||||
|
</connection>
|
||||||
|
</action>
|
||||||
|
</data>
|
||||||
|
</numberField>
|
||||||
|
<alarmOverview type="componentData" x="1020.0" y="296.0" top="72.0" bottom="72.0" left="964.0" right="964.0" rotation="0.0" shear="0.0">
|
||||||
|
<htmlId>9</htmlId>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionInternalServiced"/>
|
||||||
|
</data>
|
||||||
|
</alarmOverview>
|
||||||
|
<chart type="componentData">
|
||||||
|
<htmlId>10</htmlId>
|
||||||
|
<config type="graphicInfo">
|
||||||
|
<version type="version" value="1.3.0.0"/>
|
||||||
|
<backgroundBorder type="border" value="BorderEmpty"/>
|
||||||
|
<penPanelVisible>false</penPanelVisible>
|
||||||
|
<penPanelHeight>-1</penPanelHeight>
|
||||||
|
<toolbarVisible>true</toolbarVisible>
|
||||||
|
<toolbarPosition type="borderLayoutPosition" value="PositionNorth"/>
|
||||||
|
<shiftOffset>0</shiftOffset>
|
||||||
|
<shiftLength>0</shiftLength>
|
||||||
|
<protection type="protection" active="false" password="">
|
||||||
|
<userProtection type="userProtection" user=""/>
|
||||||
|
</protection>
|
||||||
|
<enterpriseGroupLocation type="nodeName" node="$display$"/>
|
||||||
|
<chartPanel>
|
||||||
|
<name/>
|
||||||
|
<author/>
|
||||||
|
<version type="version" value="1.3.0.0"/>
|
||||||
|
<description/>
|
||||||
|
<forAllUsers>false</forAllUsers>
|
||||||
|
<template>false</template>
|
||||||
|
<group>@NULL</group>
|
||||||
|
<XyMode>false</XyMode>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>800</width>
|
||||||
|
<heigth>400</heigth>
|
||||||
|
<iconized>false</iconized>
|
||||||
|
<backgroundBorder type="border" value="BorderEmpty"/>
|
||||||
|
<foregroundColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<backgroundPaint type="paint">
|
||||||
|
<paint type="colorSet" r="240" g="240" b="240"/>
|
||||||
|
</backgroundPaint>
|
||||||
|
<plotAreaBorder type="border" value="BorderEmpty"/>
|
||||||
|
<plotAreaTransparent>true</plotAreaTransparent>
|
||||||
|
<plotAreaIcon>@NULL</plotAreaIcon>
|
||||||
|
<plotAreaPaint type="paint">
|
||||||
|
<paint type="colorSet" r="255" g="255" b="255"/>
|
||||||
|
</plotAreaPaint>
|
||||||
|
<hairlineColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<hairlineVisible>false</hairlineVisible>
|
||||||
|
<antialiasingText>false</antialiasingText>
|
||||||
|
<antialiasingData>true</antialiasingData>
|
||||||
|
<renderMode type="chartRendering" value="Rendering2d"/>
|
||||||
|
<timeNavigatorVisible>true</timeNavigatorVisible>
|
||||||
|
<timeRangeControlVisible>true</timeRangeControlVisible>
|
||||||
|
<autoUpdateInterval>false</autoUpdateInterval>
|
||||||
|
<legendVisible>true</legendVisible>
|
||||||
|
<legendTitle/>
|
||||||
|
<legendHeading/>
|
||||||
|
<legendColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<legendBackgroundColor type="colorSet" r="240" g="240" b="240"/>
|
||||||
|
<legendFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
<legendTransparancy>0.2705882352941177</legendTransparancy>
|
||||||
|
<legendBorderType type="border" value="BorderLine"/>
|
||||||
|
<legendPositionType type="position" value="PositionNorthEast"/>
|
||||||
|
<timeSliderVisible>true</timeSliderVisible>
|
||||||
|
<timeSliderAbove>false</timeSliderAbove>
|
||||||
|
<valueSliderVisible>true</valueSliderVisible>
|
||||||
|
<valueSliderLeft>false</valueSliderLeft>
|
||||||
|
<xAxisReversed>false</xAxisReversed>
|
||||||
|
<yAxisReversed>false</yAxisReversed>
|
||||||
|
<projectorReversed>false</projectorReversed>
|
||||||
|
<scalingFonts>false</scalingFonts>
|
||||||
|
<maximumPens>5</maximumPens>
|
||||||
|
<pensPerPack>0</pensPerPack>
|
||||||
|
<triggerPen>0</triggerPen>
|
||||||
|
<timeAxisVisible>true</timeAxisVisible>
|
||||||
|
<timeAxisMajorTickVisible>true</timeAxisMajorTickVisible>
|
||||||
|
<timeAxisMinorTickVisible>false</timeAxisMinorTickVisible>
|
||||||
|
<timeAxisColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<timeAxisFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
<timeAxisLabelColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<timeAxisLabelVisible>true</timeAxisLabelVisible>
|
||||||
|
<timeAxisLongLabelVisible>true</timeAxisLongLabelVisible>
|
||||||
|
<timeAxisLabelRotation>0</timeAxisLabelRotation>
|
||||||
|
<timeAxisTitle/>
|
||||||
|
<timeAxisTitleRotation>0</timeAxisTitleRotation>
|
||||||
|
<timeAxisTitlePlacement>50</timeAxisTitlePlacement>
|
||||||
|
<timeAxisMajorGridVisible>true</timeAxisMajorGridVisible>
|
||||||
|
<timeAxisMajorGridColor type="colorSet" r="192" g="192" b="192"/>
|
||||||
|
<timeAxisMajorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>
|
||||||
|
<timeAxisMinorGridVisible>false</timeAxisMinorGridVisible>
|
||||||
|
<timeAxisMinorGridColor type="colorSet" r="192" g="192" b="192"/>
|
||||||
|
<timeAxisMinorGridStroke type="stroke" width="1.0" endCap="butt" lineJoin="bevel"/>
|
||||||
|
<headerText/>
|
||||||
|
<headerColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<headerFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
<headerJustification type="jTextJustification" value="TextJustificationLeft"/>
|
||||||
|
<footerText/>
|
||||||
|
<footerColor type="colorSet" r="0" g="0" b="0"/>
|
||||||
|
<footerFont type="font" name="Tahoma" size="11" underline="false" strikethrough="false"/>
|
||||||
|
<footerJustification type="jTextJustification" value="TextJustificationLeft"/>
|
||||||
|
<enterprisePrimarySourceLocation type="nodeName" node="$default$"/>
|
||||||
|
<enterpriseSecondarySourceLocation type="nodeName" node="$default$"/>
|
||||||
|
<enterprisePrimaryHistoryLocation type="nodeName" node="$default$"/>
|
||||||
|
<enterpriseSecondaryHistoryLocation type="nodeName" node="$default$"/>
|
||||||
|
<updateFromHistory>true</updateFromHistory>
|
||||||
|
<useSampleInterval>true</useSampleInterval>
|
||||||
|
<sampleInterval>0</sampleInterval>
|
||||||
|
<optimised>true</optimised>
|
||||||
|
<chartProtection type="protection" active="false" password="">
|
||||||
|
<userProtection type="userProtection" user=""/>
|
||||||
|
</chartProtection>
|
||||||
|
<pen type="pen">
|
||||||
|
<type>256</type>
|
||||||
|
<color type="colorSet" r="65" g="105" b="225"/>
|
||||||
|
<stroke type="stroke" width="1.5"/>
|
||||||
|
<paint>@NULL</paint>
|
||||||
|
<visible>true</visible>
|
||||||
|
<visibleLegend>true</visibleLegend>
|
||||||
|
<source type="sourceID" uri="ci:/item/CI-Eng-Sample.TANK1.LEVEL?historygroup=CIENG_SCAN10S"/>
|
||||||
|
<axisVisible>false</axisVisible>
|
||||||
|
<axisPosition>0</axisPosition>
|
||||||
|
<labelVisible>true</labelVisible>
|
||||||
|
<majorTickVisible>true</majorTickVisible>
|
||||||
|
<minorTickVisible>true</minorTickVisible>
|
||||||
|
<axisColor>@NULL</axisColor>
|
||||||
|
<labelColor>@NULL</labelColor>
|
||||||
|
<scaleRangeType>0</scaleRangeType>
|
||||||
|
<minimum>NaN</minimum>
|
||||||
|
<maximum>NaN</maximum>
|
||||||
|
<procentual>false</procentual>
|
||||||
|
<title/>
|
||||||
|
<description>Tank 1 level (%)</description>
|
||||||
|
<legendText/>
|
||||||
|
<titlePlacement>0</titlePlacement>
|
||||||
|
<titleRotation>0</titleRotation>
|
||||||
|
<labelRotation>0</labelRotation>
|
||||||
|
<majorGridVisible>false</majorGridVisible>
|
||||||
|
<minorGridVisible>false</minorGridVisible>
|
||||||
|
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
|
||||||
|
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
|
||||||
|
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
|
||||||
|
<majorGridColor>@NULL</majorGridColor>
|
||||||
|
<minorGridColor>@NULL</minorGridColor>
|
||||||
|
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
|
||||||
|
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
|
||||||
|
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
|
||||||
|
<majorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<minorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowHighLimitGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLimit>20.0</lowLimit>
|
||||||
|
<highLimit>80.0</highLimit>
|
||||||
|
<lowLowLimit>10.0</lowLowLimit>
|
||||||
|
<highHighLimit>90.0</highHighLimit>
|
||||||
|
<annotationVisible>false</annotationVisible>
|
||||||
|
<timeShift>0</timeShift>
|
||||||
|
</pen>
|
||||||
|
<pen type="pen">
|
||||||
|
<type>256</type>
|
||||||
|
<color type="colorSet" r="241" g="76" b="20"/>
|
||||||
|
<stroke type="stroke" width="1.5"/>
|
||||||
|
<paint>@NULL</paint>
|
||||||
|
<visible>true</visible>
|
||||||
|
<visibleLegend>true</visibleLegend>
|
||||||
|
<source type="sourceID" uri=""/>
|
||||||
|
<axisVisible>false</axisVisible>
|
||||||
|
<axisPosition>0</axisPosition>
|
||||||
|
<labelVisible>true</labelVisible>
|
||||||
|
<majorTickVisible>true</majorTickVisible>
|
||||||
|
<minorTickVisible>true</minorTickVisible>
|
||||||
|
<axisColor>@NULL</axisColor>
|
||||||
|
<labelColor>@NULL</labelColor>
|
||||||
|
<scaleRangeType>0</scaleRangeType>
|
||||||
|
<minimum>NaN</minimum>
|
||||||
|
<maximum>NaN</maximum>
|
||||||
|
<procentual>false</procentual>
|
||||||
|
<title/>
|
||||||
|
<description/>
|
||||||
|
<legendText/>
|
||||||
|
<titlePlacement>0</titlePlacement>
|
||||||
|
<titleRotation>0</titleRotation>
|
||||||
|
<labelRotation>0</labelRotation>
|
||||||
|
<majorGridVisible>false</majorGridVisible>
|
||||||
|
<minorGridVisible>false</minorGridVisible>
|
||||||
|
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
|
||||||
|
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
|
||||||
|
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
|
||||||
|
<majorGridColor>@NULL</majorGridColor>
|
||||||
|
<minorGridColor>@NULL</minorGridColor>
|
||||||
|
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
|
||||||
|
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
|
||||||
|
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
|
||||||
|
<majorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<minorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowHighLimitGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLimit>NaN</lowLimit>
|
||||||
|
<highLimit>NaN</highLimit>
|
||||||
|
<lowLowLimit>NaN</lowLowLimit>
|
||||||
|
<highHighLimit>NaN</highHighLimit>
|
||||||
|
<annotationVisible>false</annotationVisible>
|
||||||
|
<timeShift>0</timeShift>
|
||||||
|
</pen>
|
||||||
|
<pen type="pen">
|
||||||
|
<type>256</type>
|
||||||
|
<color type="colorSet" r="127" g="255" b="0"/>
|
||||||
|
<stroke type="stroke" width="1.5"/>
|
||||||
|
<paint>@NULL</paint>
|
||||||
|
<visible>true</visible>
|
||||||
|
<visibleLegend>true</visibleLegend>
|
||||||
|
<source type="sourceID" uri=""/>
|
||||||
|
<axisVisible>false</axisVisible>
|
||||||
|
<axisPosition>0</axisPosition>
|
||||||
|
<labelVisible>true</labelVisible>
|
||||||
|
<majorTickVisible>true</majorTickVisible>
|
||||||
|
<minorTickVisible>true</minorTickVisible>
|
||||||
|
<axisColor>@NULL</axisColor>
|
||||||
|
<labelColor>@NULL</labelColor>
|
||||||
|
<scaleRangeType>0</scaleRangeType>
|
||||||
|
<minimum>NaN</minimum>
|
||||||
|
<maximum>NaN</maximum>
|
||||||
|
<procentual>false</procentual>
|
||||||
|
<title/>
|
||||||
|
<description/>
|
||||||
|
<legendText/>
|
||||||
|
<titlePlacement>0</titlePlacement>
|
||||||
|
<titleRotation>0</titleRotation>
|
||||||
|
<labelRotation>0</labelRotation>
|
||||||
|
<majorGridVisible>false</majorGridVisible>
|
||||||
|
<minorGridVisible>false</minorGridVisible>
|
||||||
|
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
|
||||||
|
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
|
||||||
|
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
|
||||||
|
<majorGridColor>@NULL</majorGridColor>
|
||||||
|
<minorGridColor>@NULL</minorGridColor>
|
||||||
|
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
|
||||||
|
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
|
||||||
|
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
|
||||||
|
<majorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<minorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowHighLimitGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLimit>NaN</lowLimit>
|
||||||
|
<highLimit>NaN</highLimit>
|
||||||
|
<lowLowLimit>NaN</lowLowLimit>
|
||||||
|
<highHighLimit>NaN</highHighLimit>
|
||||||
|
<annotationVisible>false</annotationVisible>
|
||||||
|
<timeShift>0</timeShift>
|
||||||
|
</pen>
|
||||||
|
<pen type="pen">
|
||||||
|
<type>256</type>
|
||||||
|
<color type="colorSet" r="0" g="0" b="139"/>
|
||||||
|
<stroke type="stroke" width="1.5"/>
|
||||||
|
<paint>@NULL</paint>
|
||||||
|
<visible>true</visible>
|
||||||
|
<visibleLegend>true</visibleLegend>
|
||||||
|
<source type="sourceID" uri=""/>
|
||||||
|
<axisVisible>false</axisVisible>
|
||||||
|
<axisPosition>0</axisPosition>
|
||||||
|
<labelVisible>true</labelVisible>
|
||||||
|
<majorTickVisible>true</majorTickVisible>
|
||||||
|
<minorTickVisible>true</minorTickVisible>
|
||||||
|
<axisColor>@NULL</axisColor>
|
||||||
|
<labelColor>@NULL</labelColor>
|
||||||
|
<scaleRangeType>0</scaleRangeType>
|
||||||
|
<minimum>NaN</minimum>
|
||||||
|
<maximum>NaN</maximum>
|
||||||
|
<procentual>false</procentual>
|
||||||
|
<title/>
|
||||||
|
<description/>
|
||||||
|
<legendText/>
|
||||||
|
<titlePlacement>0</titlePlacement>
|
||||||
|
<titleRotation>0</titleRotation>
|
||||||
|
<labelRotation>0</labelRotation>
|
||||||
|
<majorGridVisible>false</majorGridVisible>
|
||||||
|
<minorGridVisible>false</minorGridVisible>
|
||||||
|
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
|
||||||
|
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
|
||||||
|
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
|
||||||
|
<majorGridColor>@NULL</majorGridColor>
|
||||||
|
<minorGridColor>@NULL</minorGridColor>
|
||||||
|
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
|
||||||
|
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
|
||||||
|
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
|
||||||
|
<majorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<minorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowHighLimitGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLimit>NaN</lowLimit>
|
||||||
|
<highLimit>NaN</highLimit>
|
||||||
|
<lowLowLimit>NaN</lowLowLimit>
|
||||||
|
<highHighLimit>NaN</highHighLimit>
|
||||||
|
<annotationVisible>false</annotationVisible>
|
||||||
|
<timeShift>0</timeShift>
|
||||||
|
</pen>
|
||||||
|
<pen type="pen">
|
||||||
|
<type>256</type>
|
||||||
|
<color type="colorSet" r="199" g="9" b="16"/>
|
||||||
|
<stroke type="stroke" width="1.5"/>
|
||||||
|
<paint>@NULL</paint>
|
||||||
|
<visible>true</visible>
|
||||||
|
<visibleLegend>true</visibleLegend>
|
||||||
|
<source type="sourceID" uri=""/>
|
||||||
|
<axisVisible>false</axisVisible>
|
||||||
|
<axisPosition>0</axisPosition>
|
||||||
|
<labelVisible>true</labelVisible>
|
||||||
|
<majorTickVisible>true</majorTickVisible>
|
||||||
|
<minorTickVisible>true</minorTickVisible>
|
||||||
|
<axisColor>@NULL</axisColor>
|
||||||
|
<labelColor>@NULL</labelColor>
|
||||||
|
<scaleRangeType>0</scaleRangeType>
|
||||||
|
<minimum>NaN</minimum>
|
||||||
|
<maximum>NaN</maximum>
|
||||||
|
<procentual>false</procentual>
|
||||||
|
<title/>
|
||||||
|
<description/>
|
||||||
|
<legendText/>
|
||||||
|
<titlePlacement>0</titlePlacement>
|
||||||
|
<titleRotation>0</titleRotation>
|
||||||
|
<labelRotation>0</labelRotation>
|
||||||
|
<majorGridVisible>false</majorGridVisible>
|
||||||
|
<minorGridVisible>false</minorGridVisible>
|
||||||
|
<lowHighLimitGridVisible>false</lowHighLimitGridVisible>
|
||||||
|
<lowHighLimitGridAreaVisible>false</lowHighLimitGridAreaVisible>
|
||||||
|
<lowLowHighHighLimitGridVisible>false</lowLowHighHighLimitGridVisible>
|
||||||
|
<majorGridColor>@NULL</majorGridColor>
|
||||||
|
<minorGridColor>@NULL</minorGridColor>
|
||||||
|
<lowHighLimitGridColor>@NULL</lowHighLimitGridColor>
|
||||||
|
<lowHighLimitGridAreaColor>@NULL</lowHighLimitGridAreaColor>
|
||||||
|
<lowLowHighHighLimiGridColor>@NULL</lowLowHighHighLimiGridColor>
|
||||||
|
<majorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<minorGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowHighLimitGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLowHighHighLimiGridStroke type="stroke" width="0.1"/>
|
||||||
|
<lowLimit>NaN</lowLimit>
|
||||||
|
<highLimit>NaN</highLimit>
|
||||||
|
<lowLowLimit>NaN</lowLowLimit>
|
||||||
|
<highHighLimit>NaN</highHighLimit>
|
||||||
|
<annotationVisible>false</annotationVisible>
|
||||||
|
<timeShift>0</timeShift>
|
||||||
|
</pen>
|
||||||
|
<penPanelLayout type="xyPenPanelLayout">
|
||||||
|
<Height>417</Height>
|
||||||
|
<AutoSize>true</AutoSize>
|
||||||
|
<SplitLocation>-1</SplitLocation>
|
||||||
|
<column index="0" visible="true" width="20"/>
|
||||||
|
<column index="1" visible="true" width="20"/>
|
||||||
|
<column index="2" visible="true" width="150"/>
|
||||||
|
<column index="3" visible="true" width="120"/>
|
||||||
|
<column index="4" visible="true" width="60"/>
|
||||||
|
<column index="5" visible="false" width="120"/>
|
||||||
|
<column index="6" visible="false" width="120"/>
|
||||||
|
<column index="7" visible="false" width="60"/>
|
||||||
|
<column index="8" visible="true" width="60"/>
|
||||||
|
<column index="9" visible="true" width="60"/>
|
||||||
|
<column index="10" visible="false" width="20"/>
|
||||||
|
<column index="11" visible="true" width="90"/>
|
||||||
|
<column index="12" visible="false" width="130"/>
|
||||||
|
<column index="13" visible="true" width="200"/>
|
||||||
|
<column index="14" visible="false" width="240"/>
|
||||||
|
<column index="15" visible="false" width="280"/>
|
||||||
|
</penPanelLayout>
|
||||||
|
<timeRange type="timeRangeLast" count="1">
|
||||||
|
<type type="timeUnit" value="TimeUnitHour"/>
|
||||||
|
</timeRange>
|
||||||
|
<updateInterval>30</updateInterval>
|
||||||
|
<fillHistory>true</fillHistory>
|
||||||
|
<updating>false</updating>
|
||||||
|
</chartPanel>
|
||||||
|
</config>
|
||||||
|
<x>472.0</x>
|
||||||
|
<y>588.0</y>
|
||||||
|
<top>172.0</top>
|
||||||
|
<bottom>172.0</bottom>
|
||||||
|
<left>344.0</left>
|
||||||
|
<right>344.0</right>
|
||||||
|
<rotation>0.0</rotation>
|
||||||
|
<shear>0.0</shear>
|
||||||
|
<data type="data">
|
||||||
|
<action type="actionInternalServiced"/>
|
||||||
|
<action type="actionConnectTo">
|
||||||
|
<property type="property" name="chart.attribute[00]"/>
|
||||||
|
<filter type="filter">
|
||||||
|
<value>0.0</value>
|
||||||
|
</filter>
|
||||||
|
<connection type="connection">
|
||||||
|
<itemName>CI-Eng-Sample.TANK1.LEVEL</itemName>
|
||||||
|
<itemId>1.1.268.0.0.1.1.7</itemId>
|
||||||
|
<itemAttribute>ItemValue</itemAttribute>
|
||||||
|
</connection>
|
||||||
|
</action>
|
||||||
|
</data>
|
||||||
|
</chart>
|
||||||
|
</coreObjectDefinition>
|
||||||
|
</visualization>
|
||||||
10
examples/CI-Eng-Sample/displays/deploy_displays.cmd
Normal file
10
examples/CI-Eng-Sample/displays/deploy_displays.cmd
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
@echo off
|
||||||
|
rem Deploy the CI-Eng-Sample displays into the operator interface (deployment DEPLOY).
|
||||||
|
rem CI Server R1.03.00. Load the sample (load.cmd) first; no admin rights needed.
|
||||||
|
rem Copies the display XML, then creates the HTML (Mobile Operator) version with jwuiutl;
|
||||||
|
rem without -o the HTML goes to %TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY.
|
||||||
|
cd /d "%~dp0"
|
||||||
|
set WAP=%TLS_WAP_PATH%
|
||||||
|
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
|
||||||
|
copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
|
||||||
|
call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank
|
||||||
7
examples/CI-Eng-Sample/displays/remove_displays.cmd
Normal file
7
examples/CI-Eng-Sample/displays/remove_displays.cmd
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
@echo off
|
||||||
|
rem Remove the CI-Eng-Sample displays (operator interface and HTML version). CI Server R1.03.00.
|
||||||
|
rem Close CIENG_Tank in the Edit Module first.
|
||||||
|
set WAP=%TLS_WAP_PATH%
|
||||||
|
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%\mobileoperator\operatorInterfaces\DEPLOY\displays\CIENG_Tank.html"
|
||||||
Loading…
Add table
Reference in a new issue