--- 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 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` when none given, or set with `-n ` (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_` process pair per network line (`durm_udp` + `durm_udp_slv` on Windows), started by `tls\com\durm_start.cmd`, configured in `tls\sup\durm__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 -f ` 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 ` also logs centrally on another node, `-q ` prints too. - Tools: `umhtestprog` (tests the message path), `umhmsg [ ]…` (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 (…)` 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 = , , , , , ` and one `tms_node = ` 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 [-t ] [-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 ` | 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_` 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 = ` 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 = , `), 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.