feat(ablegacy): B/I/O-file bit-within-word writes via existing RMW path
This commit is contained in:
@@ -360,12 +360,14 @@ public sealed class AbLegacyDriver : IDriver, IReadable, IWritable, ITagDiscover
|
||||
{
|
||||
var parsed = AbLegacyAddress.TryParse(def.Address);
|
||||
|
||||
// PCCC bit-within-word writes — task #181 pass 2. RMW against a parallel
|
||||
// parent-word runtime (strip the /N bit suffix). Per-parent-word lock serialises
|
||||
// concurrent bit writers. Applies to N-file bit-in-word (N7:0/3) + B-file bits
|
||||
// (B3:0/0). T/C/R sub-elements don't hit this path because they're not Bit typed.
|
||||
if (def.DataType == AbLegacyDataType.Bit && parsed?.BitIndex is int bit
|
||||
&& parsed.FileLetter is not "B" and not "I" and not "O")
|
||||
// PCCC bit-within-word writes — RMW against a parallel parent-word runtime (strip the /N
|
||||
// bit suffix). The per-parent-word lock serialises concurrent bit writers. Applies to every
|
||||
// bit-addressable PCCC file: N-file (N7:0/3), B-file (B3:0/0), and the I/O image files
|
||||
// (I:0/0, O:1/2); L-file bits RMW a 32-bit parent, the rest a 16-bit word. T/C/R sub-elements
|
||||
// don't reach this path because they're not Bit typed. NOTE: an Input-image (I) write is sent
|
||||
// to the PLC like any other write — the device drives the input image from physical inputs and
|
||||
// may reject it; we surface that real PCCC status rather than pre-rejecting at the driver.
|
||||
if (def.DataType == AbLegacyDataType.Bit && parsed?.BitIndex is int bit)
|
||||
{
|
||||
results[i] = new WriteResult(
|
||||
await WriteBitInWordAsync(device, parsed, bit, w.Value, cancellationToken).ConfigureAwait(false));
|
||||
|
||||
Reference in New Issue
Block a user