- New skill equipment with task modbus-station: line, station, scan type, points and connected items by quick load, tested against CI Server's own Modbus slave mirror (eqpmdcmem + eqpmdcslvtcp) - CI-Eng-Sample: section PLC1, station CIENG_PLC with write/read-back items, load/remove steps and mirror start/stop scripts - ISS-024: the TCP slave answers Open Modbus/TCP, not RTU (closed) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| equipment | ||
| monitoring | ||
| .gitignore | ||
| 01_section_df.qli | ||
| 02_item_df.qli | ||
| 02b_sub_item_df.qli | ||
| 03_his_group_df.qli | ||
| 04_item_his_df.qli | ||
| 05_trigger_df.qli | ||
| 06_class_df.qli | ||
| 07_object_df.qli | ||
| 08_auth_group_df.qli | ||
| 09_modbus_line_df.qli | ||
| 10_modbus_station_df.qli | ||
| 11_item_eqp_df.qli | ||
| 80_remove_item_eqp_df.qli | ||
| 81_remove_modbus_station_df.qli | ||
| 82_remove_modbus_line_df.qli | ||
| 85_remove_auth_group_df.qli | ||
| 86_remove_object_df.qli | ||
| 87_remove_class_df.qli | ||
| 88_remove_trigger_df.qli | ||
| 89_remove_item_his_df.qli | ||
| 90_remove_his_group_df.qli | ||
| 90b_remove_sub_item_df.qli | ||
| 91_remove_item_df.qli | ||
| 92_remove_section_df.qli | ||
| load.cmd | ||
| README.md | ||
| remove.cmd | ||
CI-Eng-Sample
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 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.
Load and remove
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 the current folder):
cmd /c "<repo>\examples\CI-Eng-Sample\load.cmd"
cmd /c "<repo>\examples\CI-Eng-Sample\remove.cmd"
- Each step prints a summary and writes a
.qlolisting; check thatErrorsis 0. - Restart CI Server after loading (stop, then start the CI Service): a new storage group stores no history until CI Server restarts.
load.cmdon a system that already has the project reportsExistsand changes nothing.remove.cmdtakes 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 also deletes its history.
Current contents
| Name | Kind | Details |
|---|---|---|
CI-Eng-Sample |
Section | Top level |
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 (alarming off), 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.MODE |
Item, Integer | 0 manual, 1 auto |
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.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.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.DEMO |
Section | Tutorial examples |
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_INCR |
Class (traditional) | Increments DEMO.COUNTER, wraps at 100; compiled on load |
CI-Eng-Sample.DEMO.INCR1 |
Object | Instance of CIENG_INCR |
CIENG_EVENT |
Item storage group | Event/Item, lifetime 1 week, rollover 1 day |
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.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 |
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_SCAN1S |
Modbus scan type | 1000 ms |
CIENG_VIEWER |
Authorization group | Read-only: ITEM_READ, SECTION_READ, ALARM_CURRENT_READ, ALARM_CHRONO_READ. No users are created by the sample. |
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.
Files
| File | Purpose |
|---|---|
01_section_df.qli |
Sections (SECTION_DF); parents before children |
02_item_df.qli |
Items (ITEM_DF) |
02b_sub_item_df.qli |
Sub-items (SUB_ITEM_DF) |
03_his_group_df.qli |
Item storage group (HIS_GROUP_DF) |
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, class (source in the METHOD memo, @" … "@, COMPILE 1), object |
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 |
equipment/eqpciengslv_start.cmd, _stop.cmd |
Start/stop the Modbus slave mirror (copy to tls\com) |
80_…92_remove_*.qli |
Names to delete, in reverse 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) |
Modbus slave mirror (for station CIENG_PLC)
CIENG_PLC reads and writes CI Server's own Modbus slave: eqpmdcmem (slave memory) and
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
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
Remove the two files from tls\com when the sample is removed. See skill equipment, task
modbus-station.md.
Monitoring processes (optional)
monitoring/ holds the lines to add to the setup files in %TLS_ROOT_PATH%\tls\sup\ so that
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
testing. See the system-management skill, task monitoring-processes.md.
Planned additions
| Phase | Adds |
|---|---|
| 6 | Template items, a class with attributes/prompts, objects that create items |
| 8 | Alarm settings on sample items |
| 9 | More storage groups (scan/time, aggregation) |
| 10 | A display and symbol |
| 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.cmdin reverse order. - Every file notes the CI Server version it was built and tested on.