@@ -120,6 +120,18 @@ otopcua-focas-cli write -h 192.168.1.50 -a MACRO:500 -t Int32 -v 42
|
||||
otopcua-focas-cli write -h 192.168.1.50 -a PARAM:1815 -t Int32 -v 100
|
||||
```
|
||||
|
||||
> **WARNING — `write -a G50.3 -t Bit -v on` is a read-modify-write.**
|
||||
> The wire call `pmc_wrpmcrng` is byte-addressed; the driver reads the
|
||||
> parent byte at `G50` first, sets bit 3, and writes the byte back. Other
|
||||
> bits in `G50` that the ladder is concurrently updating may be clobbered
|
||||
> by the byte we read a millisecond ago. Coordinate via a ladder-side
|
||||
> handshake when this matters. **PMC writes also bypass the ladder's
|
||||
> normal MDI-mode protection** — a misdirected bit can move motion or
|
||||
> latch a feedhold the moment it lands. Verify e-stop is live and the
|
||||
> machine is in JOG mode before issuing the first PMC write of a
|
||||
> session. See [`docs/drivers/FOCAS.md`](drivers/FOCAS.md) "PMC bit-write
|
||||
> read-modify-write semantics" for the full RMW flow.
|
||||
|
||||
PMC G/R writes land on a running machine — be careful which file you hit.
|
||||
Parameter writes may require the CNC to be in MDI mode with the
|
||||
parameter-write switch enabled.
|
||||
@@ -146,17 +158,17 @@ the operator pre-check runbook (MDI mode, parameter-write switch).
|
||||
**Writes are non-idempotent by default** — a timeout after the CNC already
|
||||
applied the write will NOT auto-retry (plan decisions #44 + #45).
|
||||
|
||||
#### Server-side `Writes` enforcement (issue #268 F4-a + #269 F4-b)
|
||||
#### Server-side `Writes` enforcement (issue #268 F4-a + #269 F4-b + #270 F4-c)
|
||||
|
||||
The OtOpcUa server gates every FOCAS write behind multiple independent
|
||||
opt-ins: `FocasDriverOptions.Writes.Enabled` (driver-level master switch),
|
||||
`Writes.AllowParameter` (PARAM kill switch — F4-b), `Writes.AllowMacro`
|
||||
(MACRO kill switch — F4-b), and `FocasTagDefinition.Writable` (per-tag).
|
||||
All default `false`; any one off short-circuits the server-side
|
||||
`WriteAsync` to `BadNotWritable` before the wire client is touched. See
|
||||
[`docs/drivers/FOCAS.md`](drivers/FOCAS.md) "Writes (opt-in, off by
|
||||
default)" subsection + [`docs/v2/decisions.md`](v2/decisions.md) for the
|
||||
decision record.
|
||||
(MACRO kill switch — F4-b), `Writes.AllowPmc` (PMC kill switch — F4-c),
|
||||
and `FocasTagDefinition.Writable` (per-tag). All default `false`; any one
|
||||
off short-circuits the server-side `WriteAsync` to `BadNotWritable` before
|
||||
the wire client is touched. See [`docs/drivers/FOCAS.md`](drivers/FOCAS.md)
|
||||
"Writes (opt-in, off by default)" subsection +
|
||||
[`docs/v2/decisions.md`](v2/decisions.md) for the decision record.
|
||||
|
||||
**The CLI bypasses the server-side flag.** `otopcua-focas-cli write` is a
|
||||
per-invocation operator tool — it sets `Writes.Enabled = true` locally for
|
||||
|
||||
Reference in New Issue
Block a user