feat(focas): scale axis positions by 10^PositionDecimalPlaces (config-supplied)

This commit is contained in:
Joseph Doherty
2026-06-16 05:32:36 -04:00
parent fcb3801415
commit 4973075291
4 changed files with 182 additions and 9 deletions
@@ -65,7 +65,8 @@ public static class FocasDriverFactoryExtensions
HostAddress: d.HostAddress ?? throw new InvalidOperationException(
$"FOCAS config for '{driverInstanceId}' has a device missing HostAddress"),
DeviceName: d.DeviceName,
Series: ParseSeries(d.Series ?? dto.Series)))]
Series: ParseSeries(d.Series ?? dto.Series),
PositionDecimalPlaces: d.PositionDecimalPlaces ?? 0))]
: [],
Tags = dto.Tags is { Count: > 0 }
? [.. dto.Tags.Select(t => new FocasTagDefinition(
@@ -234,6 +235,13 @@ public static class FocasDriverFactoryExtensions
/// <summary>Gets or sets the CNC series for this device (overrides top-level series if provided).</summary>
public string? Series { get; init; }
/// <summary>
/// Gets or sets the axis-position decimal places. <c>cnc_rddynamic2</c> returns
/// positions as scaled integers; the driver divides by <c>10^PositionDecimalPlaces</c>
/// so they surface in engineering units. Omitted / <c>0</c> = no scaling (legacy).
/// </summary>
public int? PositionDecimalPlaces { get; init; }
}
internal sealed class FocasTagDto