Auto: s7-a4 — array tags (ValueRank=1)
- S7TagDefinition gets optional ElementCount; >1 marks the tag as a 1-D array. - ReadOneAsync / WriteOneAsync: one byte-range Read/WriteBytesAsync covering N × elementBytes, sliced/packed client-side via the existing big-endian scalar codecs and S7DateTimeCodec. - DiscoverAsync surfaces IsArray=true and ArrayDim=ElementCount → ValueRank=1. - Init-time validation (now ahead of TCP open) caps ElementCount at 8000 and rejects unsupported element types: STRING/WSTRING/CHAR/WCHAR (variable-width) and BOOL (packed-bit layout) — both follow-ups. - Supported element types: Byte, Int16/UInt16, Int32/UInt32, Int64/UInt64, Float32, Float64, Date, Time, TimeOfDay. Closes #290
This commit is contained in:
@@ -95,13 +95,23 @@ public sealed class S7ProbeOptions
|
||||
/// value can be written again without side-effects. Unsafe: M (merker) bits or Q (output)
|
||||
/// coils that drive edge-triggered routines in the PLC program.
|
||||
/// </param>
|
||||
/// <param name="ElementCount">
|
||||
/// Optional 1-D array length. <c>null</c> (or <c>1</c>) = scalar tag; <c>> 1</c> = array.
|
||||
/// The driver issues one byte-range read covering <c>ElementCount × bytes-per-element</c>
|
||||
/// and slices client-side via the existing scalar codec. Multi-dim arrays are deferred;
|
||||
/// array-of-UDT lands with PR-S7-D2. Variable-width element types
|
||||
/// (STRING/WSTRING/CHAR/WCHAR) and BOOL (packed bits) are rejected at init time —
|
||||
/// they need bespoke layout handling and are tracked as a follow-up. Capped at 8000 to
|
||||
/// keep the byte-range request inside a single S7 PDU envelope.
|
||||
/// </param>
|
||||
public sealed record S7TagDefinition(
|
||||
string Name,
|
||||
string Address,
|
||||
S7DataType DataType,
|
||||
bool Writable = true,
|
||||
int StringLength = 254,
|
||||
bool WriteIdempotent = false);
|
||||
bool WriteIdempotent = false,
|
||||
int? ElementCount = null);
|
||||
|
||||
public enum S7DataType
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user