Full manual diffs (C50, R30, C60, L20, C40, L35, R10, R20, J10, L30, L50, P30, G10, C10) and read-only checks on the shared R1.05 test server where the permission system allowed them. Skills and summaries moved to R1.05. Issues ISS-092..129 (gaps 104-107, 114-115, 130-131 unused); ISS-074 closed (manual and software agree), ISS-091 corrected by ISS-119. version-differences: unlisted manual changes and installed-only changes. r105-verification: V5-V9 and new not-tested rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
140 lines
9.6 KiB
Markdown
140 lines
9.6 KiB
Markdown
---
|
||
manual: IM 36K10L30-01EN
|
||
title: BUS Service Engineering
|
||
edition: 4th Edition, Feb. 2026 (R1.05); first written from the 3rd Edition, Sep. 2023 (R1.03). Revision table: contact information only; full text diff: only §10 (`durwfp` return value) reworded, same meaning
|
||
version: R1.05 (first written for R1.03)
|
||
status: from docs; R1.03 (2026-10-01): installed tools, setup files (dur.sup, durm_1_udp.sup, time_table.sup, fmfprt.sup, durutl.sup) and durm_start.cmd checked read-only; durwfp verified; umhman, umhtestprog, umhmsg verified after a fresh start (ISS-030). R1.05 (2026-10-08, read-only on the test server): dur.sup, durm_1_udp.sup, durutl.sup and start scripts compared with R1.03; durwfp and umhman verified
|
||
---
|
||
|
||
# BUS Service Engineering (R1.05)
|
||
|
||
BUS Service is CI Server's messaging layer ("DUR", Dynamic User Region): every CI Server
|
||
process attaches to a shared memory area and gets a **queue** (mailbox) under its DUR name;
|
||
processes talk by messages. It also does error-text management (UMH), node-to-node links
|
||
(MDUR), time handling, printer management and process control utilities. Section numbers refer
|
||
to the manual.
|
||
|
||
## 1. Processes (§1.2)
|
||
|
||
| Process | Role |
|
||
|---|---|
|
||
| `durini` | Initialises DUR at start, then exits |
|
||
| `durtim` | Runs every second: system time, summer/winter time, queue time-outs, checks that processes still exist (`DUR-W-REM_PROC, Process <x> exited unexpectedly`), clock queue |
|
||
| `durprt` | Writes intercepted messages to `tls\lst\DURPRT.out` (debugging; leave running) |
|
||
| `umh` / `umhlog` | Build error texts from codes (`tls\dat\messages.umh`) and write them to the message log (`umhlog.log`) |
|
||
| Optional | `dur` (DUR display utility, interactive), `durbat` (start processes on request, also remote), `durclq` (finer clock-queue resolution: `durclq 50` = 50 ms), `durdbg`, `durutl` (logical addresses, node time sync), `durecs` (external clock), `dursim`, `durstp`, `durwfp`, `umhcr`, `umhlogtoo`, `umhman`, `umhmsg` |
|
||
|
||
Process names: fixed (e.g. `UMH`), `PID<n>` when none given, or set with `-n <name>` (most
|
||
CI Server executables, e.g. `opxuas -n opxuas`).
|
||
|
||
## 2. Messages and nodes (§2–§4)
|
||
|
||
- Requests are asynchronous; CI Server makes them synchronous with a *reply required* flag. The
|
||
**server** converts data between different computer architectures.
|
||
- **MDUR** (§3): one `durm_<line>` process pair per network line (`durm_udp` + `durm_udp_slv`
|
||
on Windows), started by `tls\com\durm_start.cmd`, configured in
|
||
`tls\sup\durm_<line>_udp.sup`: `line`, `quality` (lower = preferred line), `io_timeout`
|
||
(default 8000 ms, 8 checks), `portnr` (same on all nodes of one line; > 17000 advised),
|
||
`max_snd`, `cluster`, `compress`, `connect_delay`, `max_poll_int`, `our_host_name`,
|
||
`remote_set` (up to four nodes sharing one node number = redundant set). Redundant nodes
|
||
only over TCP/IP. `durmdbg -q <durm> -f <file>` traces a line; always stop with `-s`.
|
||
- `dur.sup`: node number, `host_node`, `rout_type` (ENDPOINT or ROUTER for multi-node
|
||
routing), sizes (`pool_kbytes`, `dur_max_proc`).
|
||
- **Logical addresses** (§4): node −1 in an address = look up a table (`durlnm.dat`), distributed
|
||
by `durutl` from a master node listed with `lnm_node = …` in `durutl.sup`.
|
||
|
||
**Installed (single node)**: `dur.sup` `host_node 0`, `pool_kbytes 250000`, `dur_max_proc 250`,
|
||
`rout_type 2 ENDPOINT`; `durm_1_udp.sup` `line 1`, `quality 500`, `io_timeout 8000`,
|
||
`portnr 17001`, plus keywords not in the manual: `sndportnr 17101`, `ip_adr_method IPv4`,
|
||
`ENABLE_DURMS N, 0` (host-host encryption, §13); `durm_1` is running although there is no
|
||
second node; `durutl.sup` has no active lines.
|
||
|
||
**R1.05 (installed, 2026-10-08):** `durm_1_udp.sup`, `durutl.sup` and `time_table.sup` settings as
|
||
on R1.03 (`durm_1_udp.sup` and `durutl.sup` byte-identical). `dur.sup` has one new keyword,
|
||
`GATEWAY_CORE` (*Gateway Core*, default and installed `No`) for a CI Core with a gateway licence,
|
||
described in IM 36K10J10 §3.2.6, not in this manual. `bus_start.cmd` and `durm_start.cmd` end by
|
||
calling `?*_bus_start.cmd` / `?*_durm_start.cmd` extension scripts.
|
||
|
||
## 3. Messages and the message log (§5, §6)
|
||
|
||
- Codes look like `FAC-S-ACRONYM` (S = S/I/W/E/F). Text comes from `messages.umh`; dynamic
|
||
values are inserted by name; several codes can form one history entry.
|
||
- `umhlog` writes to `tls\log\umhlog.log` (R1.05: rolls over to `umhlog.old` at about 40 MB;
|
||
the system monitor starts its logging with size `l40`, R1.03 `l4`); `-d <node>` also logs centrally on another node,
|
||
`-q <printer queue>` prints too.
|
||
- Tools: `umhtestprog` (tests the message path), `umhmsg <hex code> [<var> <value>]…`
|
||
(issue a message from a script), `umhman` (look up a hex code, interactive),
|
||
`umhlogtoo` (copy of all messages to a terminal). **Verified** after a fresh start: `umhman`
|
||
with piped input, `umhmsg` (message appears in `umhlog.log`) and `umhtestprog` work; late in an
|
||
unlicensed session they crashed or reported "license expired" (ISS-030).
|
||
- A message shown as `UMH Message Text Error: Message number <hex> (…)` means the text could
|
||
not be formatted (e.g. a `%` in a PRINT text, ISS-025).
|
||
|
||
## 4. Time (§7, §8, §11)
|
||
|
||
- `time_table.sup`: `AUTOMATIC` (installed) = BUS Service takes summer/winter times from
|
||
Windows at start (scans ±15 years); otherwise `LST_OFFSET` (minutes, **positive = west**),
|
||
`LST_NAME`, `LCT_NAME`, `CHANGE` lines; month/day abbreviations. Reload via the DUR display
|
||
utility. Installed file still has the Central European example values (−60, MET/MEST); they
|
||
are ignored while `AUTOMATIC` is set.
|
||
- Node time sync with `durutl` on the master: `tms_params = <interval s>, <limit1>, <limit2>,
|
||
<limit3>, <step2>, <step3>` and one `tms_node = <n>` per slave; beyond limit3 the slave is
|
||
set at once and an error is logged. External clock (serial Wharton/Trimble/Arbiter) with
|
||
`durecs` and `durecs.sup` (`ecs_params`). On Windows normally use Windows time
|
||
(`system-check`, `w32tm`).
|
||
|
||
## 5. Process control utilities (§10)
|
||
|
||
| Command | Use |
|
||
|---|---|
|
||
| `durwfp -p <name> [-t <s>] [-e]` | Exit 0 if the process is attached (waits up to `-t`, default 60; `-t 0` = check now); `-e` waits for it to go away. Verified on R1.03 and R1.05: `umh`, `opcman` → 0, unknown name → 1. The manual (reworded in the R1.04 edition) says the result is 1 when attached and 0 otherwise — the opposite of the process exit code (ISS-120) |
|
||
| `durstp -m -p <name>` | Send a stop message (clean stop). `-k` kills, `-m -k` = stop, then kill after `-t` s; `-f` kills even with the common area locked (dangerous); `*` wildcard (`-p alm\*`). Never `durstp -k -p \*` |
|
||
| `durbat` | Starts processes on request from other processes (also remote) |
|
||
|
||
`durstp` stops CI Server processes: use only with the user's approval.
|
||
|
||
## 6. Printer management (§12)
|
||
|
||
`FMFPRT` (printer manager, one per node) and one `FMFP_<device>` process per device (first 8
|
||
characters of the device name must be unique). **Destinations** (logical, e.g.
|
||
`SCREEN_CAPTURE`, `ALARMS`, `MESSAGES`, `DEFAULT`) map to **devices** (instances of an output
|
||
type) with an optional backup device. Configured in `fmfprt.sup`; devices and destinations in
|
||
datasets `PRINTER_DEV_DF`, `PRINTER_DEST_DF`, `PRINTER_TYPE_DF`, `PRINTER_OPER_DEST_DF`
|
||
(job/device lists `PRINTER_JOB_OVV`, `PRINTER_DEV_OVV`).
|
||
|
||
**Installed `fmfprt.sup`**: `QUEUE_LIFE 1800` s (stalled job expires), `MAX_JOBS_SHOWN 10`,
|
||
`DEVICE_POLL 5` s, `MAX_BUSY 60` polls; output types `HARDCOPY` (`fmfphc`, Windows printing,
|
||
Courier New 8 pt, 72 lines, landscape), `FILE` (`fmfpfl`, file name
|
||
`TLS_%time:DDMMYY%_%seq:03%.lst` in `tls\lst`), `APPLICATION` (`fmfpap`, program set to
|
||
Internet Explorer); fixed destinations `ALARMS`→`ALDPRT`, `AUDIT_TRAIL`→`ADTLOG`,
|
||
`MESSAGES`→`UMHLOG`, `PRINTER_1`→`RPTMAN`, `SCREEN_CAPTURE`→`CWSSHOT`. `NODE_SHARE = <node|-1>`
|
||
shares printers between nodes. Logging processes do not print by default (enable per process:
|
||
`aldprt.sup LOGPRT`, `adtsys.sup PRT_DEV`, `umhlog -q`).
|
||
|
||
The CI Service account must have the printers; `DEFAULT` uses that account's default printer.
|
||
Clean-up after a crash: stop CI Server, empty `tls\lst\printing`, delete
|
||
`tls\sav\fmf_prt_last_id.sav`, `fmfprt.sav` and `tls\dat\printer_job_ovv.*`, start.
|
||
|
||
## 7. MDUR encryption (§13)
|
||
|
||
Host-host encryption (AES-256, certificates) between CI Cores: every node must use it; no
|
||
enterprise configurations. Keys: `gen_key is_ca=1` once (CA key), `gen_key is_ca=0` on each
|
||
node → `%TLS_ALLUSERS_PATH%\pki\mel\dur\key`; certificates with the interactive `cert_write`
|
||
(CA certificate to `…\pki\mel\dur\crt\ca\ca.crt` on every node, node certificate to
|
||
`…\crt\own`; create the folders first; log `tls\log\cert_write_log.log`). Then tick *Enable
|
||
HostHost encryption* in each `durm_x_udp.sup` (installed keyword `ENABLE_DURMS`). Keep the CA
|
||
key off the servers. Not practiced (single node; `tls\pki\mel` does not exist yet).
|
||
|
||
## 8. Adaptive queues (§14)
|
||
|
||
Each process has a fixed queue (the *adaptive minimum*); for processes listed on the
|
||
*Adaptive queues* tab of `dur.sup` (`ADAPTIVE_QUEUE_SETS = <process>, <percent>`), DUR may
|
||
grow the queue temporarily by up to that percentage of the total queue area, avoiding overflows
|
||
during bursts. Add node queues for multi-node systems and new processes (extra executors,
|
||
DSS servers, equipment managers). In the performance monitor *Minimum KB*/*Maximum KB*/*Current
|
||
KB* and a high-queue of 100 % show that a queue needed more space → raise its size. Total area
|
||
exhausted → `DUR_F_NO_SPACE`.
|
||
|
||
**Installed**: `ALM` 10, `ALH` 10, `WFLGDI` 20, `WFLCDI`/`WFLIDI`/`WFLADI`/`ITHEIX`/`ITHSER` 2,
|
||
`DSSSDA*`/`DSSEVT*`/`OPCEXE` 1 %; R1.05 adds `ADTSTO` 1 %. Note: `OPCEXE` does not match the
|
||
installed executor names `OPCEXE1`…`4` (no wildcard) — see ISS-026; unchanged on R1.05.
|