Joseph Doherty
c402872c0c
chore(bit-rmw): mark all 5 tasks complete + live results + follow-ups
v2-ci / build (push) Failing after 38s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-17 12:14:56 -04:00
Joseph Doherty
098adf43d0
fix(ablegacy): dispose per-parent RMW locks on teardown (review symmetry)
...
DisposeRuntimes() now disposes and clears _rmwLocks, _creationLocks, and
_runtimeLocks so ReinitializeAsync/ShutdownAsync cycles don't orphan their
SemaphoreSlim instances. Mirrors the TwinCAT _bitRmwLocks fix already shipped.
2026-06-17 12:10:42 -04:00
Joseph Doherty
56ccaa797c
docs(drivers): B/I/O + BOOL-within-word bit writes (RMW)
2026-06-17 12:03:54 -04:00
Joseph Doherty
c48f299994
test(ablegacy): bit write surfaces device rejection status (review)
...
Adds `Bit_write_surfaces_device_rejection_status` to AbLegacyBitRmwTests,
verifying that a non-zero libplctag status returned by the parent-word write
in WriteBitInWordAsync propagates as a non-Good OPC UA StatusCode rather than
being silently swallowed. Added a minimal `WriteStatusOverride` hook to
FakeAbLegacyTag (test-project-only) so the read half of the RMW still
returns 0/Good while the write half returns the seeded error code.
2026-06-17 12:02:10 -04:00
Joseph Doherty
340c145e87
fix(twincat): dispose bit-RMW locks on shutdown + guard null parent read (review)
2026-06-17 12:01:55 -04:00
Joseph Doherty
a73e20fb28
feat(twincat): BOOL-within-word writes via driver-level parent-word RMW
2026-06-17 11:55:44 -04:00
Joseph Doherty
5c6b7cd6f9
feat(ablegacy): B/I/O-file bit-within-word writes via existing RMW path
2026-06-17 11:54:03 -04:00
Joseph Doherty
02d6bbe381
docs(plan): bit-index RMW writes implementation plan + tasks
2026-06-17 11:51:29 -04:00
Joseph Doherty
cf231a7868
docs(design): bit-index RMW writes (AbLegacy B/I/O + TwinCAT BOOL-within-word)
2026-06-17 11:44:14 -04:00
Joseph Doherty
67da6d4fc4
chore(phase4d): mark all 8 tasks complete + live results + follow-ups
v2-ci / build (push) Failing after 43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-17 06:37:37 -04:00
Joseph Doherty
988a7a938f
fix(s7): UInt64 box cast + Timer/Counter transient-write returns BadNotWritable (final review)
...
M1: add missing (object) cast to UInt64 arm of DecodeScalarBlock switch expression,
matching the Int64 arm style and the comment that each arm is boxed explicitly.
M2: short-circuit Timer/Counter writes in WriteAsync to BadNotWritable before
WriteOneAsync, so transient equipment-tag refs (Writable=true from parser) return
the same status code as authored tags rejected at init — documented in the docs.
Adds 6 pure unit tests pinning the area-detection precondition the guard relies on.
EncodeScalarBlock Timer/Counter throws remain as the defensive backstop.
2026-06-17 06:31:41 -04:00
Joseph Doherty
b7dfb5aff2
docs(s7): wide-type/Timer-Counter support — CLI help + driver-specs + S7 driver doc
...
Drop the "not yet implemented / BadNotSupported" stale note from all three
S7 CLI --type option descriptions (ReadCommand, WriteCommand, SubscribeCommand)
and replace with accurate help listing the full supported type set, byte-anchored
addressing for wide types, and Timer/Counter read-only status.
docs/v2/driver-specs.md §5: add Supported Data Types table, Byte-Anchored
Addressing table (DBB/MB/IB/QB + examples), Timer/Counter read section with
the Counter-BCD known-limitation, and Deferrals list.
docs/drivers/S7.md: expand Data types to a full table, add "Wide types &
Timer/Counter" section (byte-anchored addressing, Timer/Counter read-only,
Counter BCD known-limitation, deferrals), update Address forms table and
1-D array Deferrals note.
2026-06-17 06:22:36 -04:00
Joseph Doherty
11e8e4302d
fix(s7): Counter raw-word note + reject Writable Timer/Counter + Timer time-base tests (bundle review)
2026-06-17 06:18:48 -04:00
Joseph Doherty
8cfb8e920e
feat(s7): Timer/Counter read (read-only) + route Timer/Counter through buffer path
2026-06-17 06:03:47 -04:00
Joseph Doherty
5db08e9e85
feat(s7): DateTime (S7 DATE_AND_TIME) scalar read+write via S7.Net.Types.DateTime
2026-06-17 05:54:08 -04:00
Joseph Doherty
1e5fec2f85
feat(s7): String (S7 STRING) scalar read+write via S7.Net.Types.S7String
2026-06-17 05:50:49 -04:00
Joseph Doherty
286be5df88
feat(s7): byte-buffer codec dispatch + Int64/UInt64/LReal scalar read+write
2026-06-17 05:38:18 -04:00
Joseph Doherty
06b858eb02
feat(s7): unblock wide-type/Timer-Counter init guards + fix Int64/UInt64 node mapping
2026-06-17 05:24:48 -04:00
Joseph Doherty
b1256bcbf2
docs(phase4d): S7 wide-types implementation plan + tasks.json
2026-06-17 05:17:50 -04:00
Joseph Doherty
eb7f3c49ee
docs(phase4d): S7 wide types + Timer/Counter design (approved)
2026-06-17 05:15:42 -04:00
Joseph Doherty
12e114b3b0
chore(phase4c): mark tasks complete + record follow-ups (shipped 0f92e9e2)
v2-ci / build (push) Failing after 51s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-16 23:02:23 -04:00
Joseph Doherty
0f92e9e238
fix(adminui): reject AbLegacy array length >256 at author-time (review I-3)
v2-ci / build (push) Failing after 1m3s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-16 22:31:42 -04:00
Joseph Doherty
3bb2031d1d
fix(opcua): array equipment-tag nodes are read-only (array writes out of scope, review M-1)
2026-06-16 22:31:15 -04:00
Joseph Doherty
5f7a2acd27
fix(abcip): isArray:true without a positive arrayLength is scalar (review I-2 consistency)
2026-06-16 22:30:11 -04:00
Joseph Doherty
d30fb77e31
fix(s7): use ArrayCount!.Value in DecodeArrayBlock (review I-1 clarity)
2026-06-16 22:29:26 -04:00
Joseph Doherty
05c7e86f0c
docs(phase4c): cross-driver 1-D array support + isArray/arrayLength keys + coverage matrix
2026-06-16 22:18:55 -04:00
Joseph Doherty
94e8c55b5c
fix(abcip): explicit IsArray flag so 1-element arrays read as arrays (review I-1)
2026-06-16 22:14:41 -04:00
Joseph Doherty
ce5d46be08
fix(ablegacy): gate array read on isArray:true; 1-element arrays + assumption comments (review C-2/I-3)
2026-06-16 22:14:36 -04:00
Joseph Doherty
3bbe39c166
fix(s7): treat ArrayCount>=1 as array so 1-element arrays read as arrays (review I-2)
2026-06-16 22:12:30 -04:00
Joseph Doherty
49ac1392a8
fix(modbus): gate array read on isArray:true; 1-element arrays (review C-1)
2026-06-16 22:12:18 -04:00
Joseph Doherty
3e74239532
feat(twincat): 1-D array symbol read via ADS + IsArray discovery
2026-06-16 21:59:17 -04:00
Joseph Doherty
950069392c
feat(ablegacy): PCCC multi-element file array read + IsArray discovery
2026-06-16 21:55:41 -04:00
Joseph Doherty
f4d5a5ee9c
feat(abcip): 1-D array read via libplctag + IsArray discovery
2026-06-16 21:55:20 -04:00
Joseph Doherty
a82c22c645
feat(s7): 1-D array block read + decode loop + IsArray discovery
2026-06-16 21:54:50 -04:00
Joseph Doherty
8d3dc32148
feat(modbus): String + BitInRegister array decode + equipment-tag arrayLength
...
- DecodeRegisterArray: add String and BitInRegister cases replacing the
default:throw; each element decoded by reusing DecodeRegister on its
contiguous register slice → string[] / bool[]
- ModbusEquipmentTagParser.TryParse: read optional arrayLength key from
TagConfig JSON and thread it into ModbusTagDefinition.ArrayCount
(null when absent or zero, preserving scalar behaviour)
- ModbusArrayTests: 8 new tests covering the two decode cases and the
equipment-tag parser/resolver path; 285/285 green
2026-06-16 21:51:55 -04:00
Joseph Doherty
c2006dfb57
feat(adminui): driver-agnostic isArray/arrayLength Tag-modal control
2026-06-16 21:50:27 -04:00
Joseph Doherty
eb8a8dc19d
test(runtime): cover disabled-array + zero-length in artifact parity round-trip (review)
2026-06-16 21:45:19 -04:00
Joseph Doherty
0a747c343d
feat(runtime): decode IsArray/ArrayLength byte-parity in DeploymentArtifact
2026-06-16 21:40:22 -04:00
Joseph Doherty
584e9f2aee
test(opcua): applier forwards array params + overflow rows + doc fix (review)
...
Extends RecordingSink to capture isArray/arrayLength per EnsureVariable call,
adds two applier-level tests asserting the wire-through for array and scalar
plans, adds float/overflow InlineData rows to ExtractTagArray theory, and
corrects the ExtractTagArray XML-doc wording (null => unbounded ArrayDimensions=[0]).
2026-06-16 21:36:38 -04:00
Joseph Doherty
71cc417182
feat(opcua): EquipmentTagPlan IsArray/ArrayLength + composer ExtractTagArray + applier wire-in
2026-06-16 21:27:43 -04:00
Joseph Doherty
3172b7bdee
test(opcua): cover null-arrayLength dimension + tighten scalar assertion (review)
2026-06-16 21:22:43 -04:00
Joseph Doherty
a792820283
feat(opcua): EnsureVariable array params (ValueRank=OneDimension + ArrayDimensions)
2026-06-16 21:16:07 -04:00
Joseph Doherty
9dfabd279f
docs(phase4c): implementation plan + tasks.json (12 tasks, big-bang all 5 drivers)
2026-06-16 21:10:50 -04:00
Joseph Doherty
efccd8d1a6
docs(phase4c): design — cross-driver OPC UA array support (big-bang, all 5 drivers)
2026-06-16 21:06:59 -04:00
Joseph Doherty
050164b21f
chore(phase4b): mark tasks complete + record follow-ups (shipped 08a65513)
v2-ci / build (push) Failing after 41s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-16 20:15:37 -04:00
Joseph Doherty
08a6551360
docs(phase4b): Modbus driver-type canonical + Galaxy nesting + FOCAS auto-scale (managed-backend caveat)
v2-ci / build (push) Failing after 37s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
2026-06-16 19:58:11 -04:00
Joseph Doherty
6855be288f
feat(focas): per-axis auto-scale from cnc_getfigure figures (manual config = fallback)
2026-06-16 19:52:45 -04:00
Joseph Doherty
a40c77de87
fix(adminui): flip remaining ModbusTcp test seeds + doc comments to Modbus (review)
2026-06-16 19:51:56 -04:00
Joseph Doherty
bec37848d5
fix(galaxy): degrade all parent-cycle members to root (review)
2026-06-16 19:51:20 -04:00
Joseph Doherty
21c7645da8
feat(galaxy): nest gobject browse tree by parent_gobject_id (degrade-to-flat)
2026-06-16 19:41:26 -04:00