Full manual diffs (L15, C20, E30, L25, J40, C10 §2, L10, P10, P11, J20, C30, P20, R40, E10) and read-only checks on the shared R1.05 test server. Skills and summaries moved to R1.05; new skill pytools (IM 36K10P40) from docs (no Python on the test server). Issues ISS-132..181; corrections to version-differences (E10, E30, P11, dss_ath_grp_u0104); C10 summary lists the 3 new authorization actions; r105-verification V10-V17. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 KiB
| manual | title | edition | version | status |
|---|---|---|---|---|
| IM 36K10L25-01EN | Audit Trail Management Engineering | 4th Edition, Feb. 2026 (R1.05; first summarized from the 3rd Edition, Sep. 2023, R1.03) | R1.05 (first written for R1.03) | processes, scripts, adtsys.sup, classifiers, ADT group, AUDIT_TRAIL contents, selection groups and ADTLOG (default and filtered) verified on the R1.03 test system 2026-10-01; on the R1.05 test server processes, ADT group, classifier list, dataset definitions, setup files, start scripts and an RQL read of AUDIT_TRAIL verified 2026-10-09 (read-only); distributor, extra collectors, classifier extension in C from docs |
Audit Trail Management Engineering (R1.05)
R1.05 re-check (2026-10-09). The 4th edition (Feb. 2026) differs from the 3rd only in the
revision table and contact information (full text diff, tools/manual_diff.py); section
numbers are unchanged. The installed software changed without manual text:
AUDIT_TRAILfieldsAPPROVAL_REASON(256) andAPPROVER(128), added for FDA Part 11 (approval of changes to critical process parameters);E_LAYOUTunitsAPPRR/APPR(ISS-140). Filled by display writes with a reason and approver (IM 36K10C50 §2.22, §4.12; ISS-099).- 499 classifiers (R1.03: 463): action
PENDING, sourcesREST-SERVER,PYTOOLS,PASSWORD-CHECK(ISS-141). audit_start.cmd/audit_stop.cmdcall?*_audit_start.cmd/?*_audit_stop.cmd(ISS-142).- Unchanged: executables,
AUDIT_EVENT_CLAS_DFandAUDIT_SELGRP_DFdefinitions,fmfprt.sup, the rest ofadtsys.sup;adtini.supdiffers only in licence lines.dur.supgivesADTSTOan adaptive queue (ISS-109, ISS-122). Details are in the sections below, marked "R1.05".
AUDIT Service records who changed what and when: value and limit changes, definition inserts /
modifies / deletes, alarm acknowledgements, logins and logouts. Events are stored in the history
storage group ADT and read through dataset AUDIT_TRAIL. The manual is written for system
integrators (processes, setup file, extending the classifier tables in C). Section numbers refer
to the manual; "installed" means checked on the R1.03.00 test system.
1. Interfaces and data stores (§1)
| Interface / store | Use |
|---|---|
| Notification | Applications report an event (routine adt_evt_not); only one field of a stored event, the modifiable ASCII application info, can be changed afterwards |
| Distribution | Connected processes (AUDIT destinations) receive events as they are stored, optionally filtered by a selection group |
| Retrieval | Reading stored events (collector process; AUDIT_TRAIL dataset) |
| History management | Storage group ADT is managed by HISTORY Service (rollover, lifetime, units) |
| Event classifier file | Which event types exist and whether each is stored — dataset AUDIT_EVENT_CLAS_DF (tls\dat\adt_ecl.dat) |
| Selection group file | Named, compiled selection expressions — dataset AUDIT_SELGRP_DF (tls\dat\adt_sgp.dat) |
Single events cannot be deleted; only whole storage units or the whole group (HISTORY Service).
2. Processes (§1.2, §2, §4.1)
| Process | Job |
|---|---|
ADTSTO (storage) |
Creates group ADT if missing (rollover 1 day, unit lifetime 2 days), fills the classifier file with the basic set (existing entries kept), creates the selection group file, stores events, sends them to destinations. Ignores events while storage of ADT is stopped. Must run on the node of the history manager HIS |
ADTCOL01 (+ ADTCOL02…) |
Answers retrieval requests, also while storage is stopped; extra images share the queue adtcol01 (load sharing). Exits if group ADT does not exist, so ADTSTO must start first |
ADTDST (distributor) |
Optional relay on another node when several destinations there want events (3 + N instead of 3 × N BUS messages) |
ADTLOG (logging) |
Optional destination that prints events as text (stdout or PRT_DEV), optionally only a selection group |
Gaps are signalled with missing events records/messages (storage queue overflow, lost connection, unexpected sequence number). Destinations check sequence numbers and periodic flow-control messages; a missing flow-control message makes them reconnect.
Installed: tls\com\audit_start.cmd does nothing if adtsto already runs, refuses to start
when his is not running, then starts adtsto -n adtsto and adtcol -n adtcol01. adtcol02,
adtlog and adtdst are present as commented-out lines. audit_stop.cmd stops adt* with
durstp. Executables in tls\exe: adtsto, adtcol, adtdst, adtlog, adtimport
(undocumented), adtxdb (service debugger, not documented).
R1.05 (verified 2026-10-09): same executables and the same two processes running
(ADTSTO, ADTCOL01). At the end audit_start.cmd calls every
tls\com\?*_audit_start.cmd; audit_stop.cmd calls every ?*_audit_stop.cmd before stopping
adt* (ISS-142).
3. Event classifiers (§3.1, Appendix 1)
An event classifier is four names <SUBJECT>.<ATTRIBUTE>.<ACTION>.<SOURCE>, e.g.
ITEM.VALUE.MODIFY.HMI. Each name has an internal code; stored events keep only the codes, so
codes must never change once used.
- Subjects: ALN-DEST, ALN-USR, CLASS, CLASS-ATTR, DATASET, EQUIPMENT, F/T-SYSTEM, INSTALLATION, ITEM, OBJECT, OBJECT-ATTR, SECTION, STATION, SUB-ITEM, TRIGGER-GROUP, UNIT, USER-PROFILE, ACKNOWLEDGE-TYP.
- Attributes (about 170): item properties (VALUE, STATUS, HIGH-LIMIT, LOW-LIMIT, DESCRIPTION, ENGINERING-UNIT, ALARM-INHIBIT, ALARM-SHELVE, ENABLE-AUDIT-TR …), point/line properties, alarm notification users and schedules, NULL-ATTR (no attribute).
- Actions: ACKNOWLEDGE, DELETE, INSERT, LOGIN, LOGIN-ATTEMPT, LOGOUT, MODIFY, SHELVE, UN-SHELVE (the manual's explanations of SHELVE and UN-SHELVE are swapped).
- Sources: COMPUTE (PROCESS Service), DSS-CLIENT, ENT-EDIT-MOD, ENT-ENG-MOD, ENT-QUALIZATION, FTEXCHANGE, HMI (Engineering Module), LOC-EDIT-MOD, LOC-ENG-MOD, ODBC, OPC-DA-SERVER, OPER-INTERFACE, OTHERS, QUICKLOAD.
The notifying routine checks a cached copy of the classifier's storage flag and sends
nothing when storage is off; the cache refreshes every ECL_REFRESH seconds (default 1800), so
a change to the storage flag may take up to 30 minutes to reach running programs.
Installed: AUDIT_EVENT_CLAS_DF fields NAME (the four names joined), SUBJECT,
ATTRIBUTE, AGITATION (= action), SOURCE, DESCRIPTION, BASIC_SET, STORAGE (the only
changeable field); 463 classifiers, 444 stored. Off by default: the COMPUTE (PROCESS) source for
item/sub-item values, status, quality, limits, deadband, and DATASET.NULL-ATTR.*.COMPUTE. Not in
the manual: subject CI-SERVER (logins; the manual's F/T-SYSTEM is the old name), subject/action
EAL OPERATION, source VIA-OPC-UAS (ISS-051).
R1.05 (verified 2026-10-09): 499 classifiers, all basic set, 478 stored. New (36, not in the
manual, ISS-141): action PENDING on ITEM.VALUE / ITEM.STATUS for sources HMI,
LOC-ENG-MOD, OPER-INTERFACE, OTHERS, VIA-OPC-UAS, COMPUTE (the COMPUTE pair off), tied
in the C header history to Vnet on send / on receive item update policies; sources
REST-SERVER (RESTful API), PYTOOLS (IM 36K10P40) and PASSWORD-CHECK (Edit Module Password
Check, IM 36K10C50 §2.31) for CI-SERVER login / logout / login attempt and DATASET
insert / modify / delete, plus ITEM.VALUE / STATUS / QUALITY-CODE MODIFY for the first
two. Defined in tls\inc\adt_ece.h (ADT_SAC_PEND, ADT_SAS_JRST, ADT_SAS_PTLS,
ADT_SAS_PSWD). Off by default: the 19 COMPUTE classifiers of R1.03 plus the two
PENDING.COMPUTE.
What is actually recorded (verified): configuration changes and DSS value writes are stored
as dataset events — SUBJECT_GROUP = dataset name (ITEM_DF, ITEM_VAL, SECTION_DF …),
SUBJECT_ATTRIBUTE = field, old and new value, user and source: ENT-ENG-MOD for dssqld
(not QUICKLOAD), LOC-ENG-MOD for the Engineering Module; every dssqld run also adds a
CI-SERVER LOGIN/LOGOUT pair. itmval -p writes are not audited. The item option
AUDIT_INFO (Audit trailing wanted, default 0; also on SUB_ITEM_DF, EXTERNAL_ALARM_DF) made
no difference for these tools; it switches the ITEM.* events of operator writes: a button on
display CIENG_Tank stored ITEM.VALUE.MODIFY.OPER-INTERFACE (old/new, user) with
AUDIT_INFO 1 and nothing with 0 (verified, ISS-049; the same events from Manual / Auto on
CIENG_Control, 2026-10-06). A changed STORAGE flag takes effect only after the notifying process
re-reads it (ECL_REFRESH, up to 30 minutes, both directions; verified, ISS-050).
4. Setup files (§4.2)
Only tls\sup\adtsys.sup is installed; it documents every keyword and is the template for
per-process files named after the process (adtsto.sup, adtcol01.sup, adtdst.sup,
adtlog.sup, adtovv.sup for the chronological overview). Without a file, defaults apply.
| Tab / keyword | Meaning | Default |
|---|---|---|
General MAX_OPEN_UNITS |
Storage units open at once (2–100) | 20 |
PRT_DEV |
Printer for ADTLOG |
stdout |
QUESIZE |
BUS queue size, kB | see below |
SEL_GROUP |
Selection group applied by the process | none |
Node Numbers COL_PROC, DST_PROC, HIS_PROC, STO_PROC |
<node>, <name> of collector, distributor, history manager, storage |
local ADTCOL01, local ADTSTO, local HIS, ADTSTO on the host node |
NODE_ECL_FILE, NODE_SGP_FILE |
Node holding the classifier / selection group file | storage node |
Layout E_LAYOUT |
Message units and widths for the overview / log (ACTM time, SBGP subject, SATR, SACT, SACS, SBID subject id, USER, TERM, OVAL/NVAL old/new value, REAS, AAI1/MAI1 application info, ACND/ACNM/NOND/NONM/NOTM node, program and notification time, SPCE n, NWLN n) |
SPCE,2,ACTM,21,SBGP,13,SATR,13,SACT,11,SACS,15,NWLN,1,SPCE,4,SBID,40,USER,16,NWLN,1,SPCE,6,OVAL,35,NVAL,35,NWLN,1 |
E_NOSPACE |
No automatic space between units | off |
TIMEFMT |
Picture for ACTM (YYYY MMM DD hh mm ss ppp) |
see below |
Events ECL_REFRESH |
Classifier cache refresh, s | 1800 |
FLOWC |
Flow-control interval, timeout (s) | 30, 10 |
HBEAT |
Heartbeat, s | 10 |
TRYCON |
Reconnect interval, s | 10 |
Header FORM_FEED, HEADER (repeatable), HEADER_AFTER |
Log header | off / layout header / never repeated |
Installed differences: the adtsys.sup help says QUESIZE default 10 kB (minimum 10), the
manual says default and maximum 200 kB; the file sets QUESIZE = 200. The TIMEFMT default is
DD/MM/YY hh:mm:ss in the file help and DD/MM/YY hh:mm:ss.ppp in the manual; ADTLOG prints
milliseconds, so the manual is right (ISS-051). Also installed: adtini.sup (licence value only),
and fmfprt.sup assigns the printer function AUDIT_TRAIL to ADTLOG.
R1.05 (verified 2026-10-09): adtsys.sup and adtsys.tpl add only the E_LAYOUT units
APPRR (approval reason) and APPR (approver) (ISS-140); the QUESIZE and TIMEFMT help texts
are unchanged (ISS-051 still applies). ADTLOG with the new units not tested.
Verified: adtlog -n <name> run from a console prints new events with the default layout;
with a setup file <name>.sup holding SEL_GROUP, E_LAYOUT, TIMEFMT, HEADER,
HEADER_AFTER it printed only the selected events in the custom layout (sample
examples/CI-Eng-Sample/audit/adtlogci.sup).
4a. Selection groups (not described in the manual)
AUDIT_SELGRP_DF: NAME, DESCRIPTION, EXPRESSION (memo), COMPILE, LISTING,
VALID_EXPRESSION. The compiler listing names the language: string comparisons on aai1 acnd acnm actm mai1 nond nonm reas sacs sact satr sbgp sbid term user, constant comparisons on nval oval, operators = != > < >= <=, and, or, parentheses; no LIKE (prefix match with a range
>= "X." and < "X/"). Errors: ADTT-E-UNKNOWN_TOK, ADTT-E-CMP_NO_SUCC. Verified.
4b. Reading the trail
AUDIT_TRAIL (key NAME = <action time>/<stamp>; all fields read-only except PROFILE and
APPLICATION_SUB) is in dssqld.sup NO-EXPORT: export with -d AUDIT_TRAIL or a qli that
names it — the qli export returns 0 records unless NAME is in @FIELDS; @SELECT accepts
LIKE "X.*". RQL select … from audit_trail works in reports (sample CIENG_AUDIT). ADT
group on the test system: lifetime 52 weeks, rollover 1 day. Task files: skill audit-trail.
R1.05 (verified 2026-10-09): audit_trail.dss adds APPROVAL_REASON (char 256) and
APPROVER (char 128), select only (ISS-140). An RQL read on the R1.05 test server found them
filled on operator item-value writes (OPER-INTERFACE), with REASON empty. ADT group there:
52 weeks, 1 day. dssqld.sup still has NO-EXPORT=AUDIT_TRAIL.
5. Extending classifiers (§4.3)
New subjects/attributes/actions/sources are added in C: #define codes ≥ 0x80000000 in
adt_ece.h, names starting with _, rebuild adt_ece() (tls\src\adt_ece.c) and re-link AUDIT,
INTEGRATION, DATABASE Service and every program that uses it. Installed: adt_ece.c,
tls\inc\adt_ece.h, audit_compile.cmd/.mak, audit_build.cmd/.mak are shipped. System
integrator work; not practiced.