Skip to content

Commit 7fe5aeb

Browse files
Salinity database embedding fixed
1 parent d9744ad commit 7fe5aeb

6 files changed

Lines changed: 197710 additions & 12 deletions

File tree

‎src/ApplicationRuntime.cs‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,7 +575,7 @@ public void SetLBLResponders(string mode, double[] coords)
575575
}
576576
}
577577

578-
public void StartCalibration(double start, double step, int n)
578+
public void StartCalibration(double start, double step, int n, double stLatOv = double.NaN, double stLonOv = double.NaN)
579579
{
580580
if (_calibrationManager != null && _calibrationManager.State != CalibrationState.Idle)
581581
{
@@ -596,16 +596,21 @@ public void StartCalibration(double start, double step, int n)
596596
return;
597597
}
598598

599-
_azmManager.PauseInterrogation();
599+
//_azmManager.PauseInterrogation();
600600

601601
_calibrationManager = new CalibrationManager(
602602
rotator,
603603
_azmManager,
604604
msg => _logger?.Write($"[CAL] {msg}"),
605-
AppContext.BaseDirectory);
605+
AppContext.BaseDirectory, stLatOv, stLonOv);
606606

607607
_calibrationManager.Start(start, step, n);
608-
_logger?.Write($"[CAL] Started: start={start:F1}°, step={step:F1}°, n={n}");
608+
if (!double.IsNaN(stLatOv) && !double.IsNaN(stLonOv))
609+
_logger?.Write($"[CAL] Started with location override: {stLatOv:F6}°, {stLonOv:F6}°");
610+
else
611+
_logger?.Write($"[CAL] Started in relative mode (no location override)");
612+
613+
_logger?.Write($"[CAL] Parameters: start={start:F1}°, step={step:F1}°, n={n}");
609614
}
610615

611616
public void StopCalibration()

‎src/AzimuthConsole.csproj‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,15 @@
3535
<EmbeddedResource Include="wwwroot\**">
3636
<LogicalName>AzimuthConsole.wwwroot.%(RecursiveDir)%(Filename)%(Extension)</LogicalName>
3737
</EmbeddedResource>
38+
<None Remove="WWSalinity.xml" />
3839
<PackageReference Include="AZMLib" Version="1.1.17" />
3940
<PackageReference Include="UCNLDrivers" Version="1.1.6" />
4041
<PackageReference Include="UCNLPhysics" Version="1.0.0" />
4142
<PackageReference Include="UCNLMan" Version="1.0.1" />
4243
<PackageReference Include="UCNLNav" Version="1.0.3" />
4344
<PackageReference Include="UCNLNMEA" Version="1.0.0" />
4445
<PackageReference Include="UCNLSalinity" Version="1.0.1" />
46+
<EmbeddedResource Include="WWSalinity.xml" />
4547
<!-- <PackageReference Include="System.IO.Ports" Version="10.0.5" /> -->
4648

4749
<EmbeddedResource Update="wwwroot\i18n.js">

‎src/CalibrationManager.cs‎

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,26 @@ public class CalibrationManager
4848
public int CollectedPoints => _calibrationPairs.Count;
4949
public int TotalPoints => (int)(360.0 / _stepAngle_deg);
5050

51+
52+
private readonly double _stationOvLat;
53+
private readonly double _stationOvLon;
54+
55+
5156
private readonly List<CalibrationDataPoint> _rawData = new();
5257
private readonly List<(double EncoderAngle, double MeasuredAzimuth)> _calibrationPairs = new();
5358

5459
public IReadOnlyList<(double EncoderAngle, double MeasuredAzimuth)> CalibrationPairs => _calibrationPairs;
5560

5661
public CalibrationManager(uAuxRadantPort rotator, AZMManager azmManager,
57-
Action<string> log, string basePath)
62+
Action<string> log, string basePath, double stOvLat = double.NaN, double stOvLon = double.NaN)
5863
{
5964
_rotator = rotator ?? throw new ArgumentNullException(nameof(rotator));
6065
_azmManager = azmManager ?? throw new ArgumentNullException(nameof(azmManager));
6166
_log = log;
6267

68+
_stationOvLat = stOvLat;
69+
_stationOvLon = stOvLon;
70+
6371
_azmManager.USBLRawDataHandler += OnUSBLRawData;
6472
_azmManager.USBLRawDataEventEnabled = true;
6573
_rotator.WaitingToFinishRotationChanged += OnWaitingChanged;
@@ -83,6 +91,10 @@ public void Start(double startAngle, double stepAngle, int measurementsPerPoint)
8391
return;
8492
}
8593

94+
// Останавливаем опрос перед началом калибровки
95+
_azmManager.PauseInterrogation();
96+
_log("Interrogation paused for calibration");
97+
8698
_stepAngle_deg = stepAngle;
8799
_measurementsPerPoint = measurementsPerPoint;
88100
_rawData.Clear();
@@ -101,6 +113,17 @@ public void Stop()
101113
{
102114
_state = CalibrationState.Idle;
103115
_rotator.RequestStop();
116+
117+
// Отключаем LocationOverride
118+
_azmManager.DisableLocationOverride();
119+
120+
// Возобновляем опрос
121+
if (!_azmManager.InterrogationActive)
122+
{
123+
_azmManager.ResumeInterrogation();
124+
_log("Interrogation resumed");
125+
}
126+
104127
_log("Calibration stopped");
105128
}
106129

@@ -141,7 +164,20 @@ private void OnWaitingChanged(object? sender, EventArgs e)
141164
{
142165
_state = CalibrationState.Measuring;
143166
_currentMeasurementCount = 0;
144-
_log($"Measuring at {_currentTargetAngle_deg:F1}° ({_measurementsPerPoint} samples)");
167+
168+
// Устанавливаем LocationOverride: координаты пирса + угол энкодера как heading
169+
_azmManager.OverrideLocation(_stationOvLat, _stationOvLon, _rotator.CurrentAngle);
170+
171+
// Запускаем опрос для сбора измерений
172+
_azmManager.ResumeInterrogation();
173+
174+
string locInfo = (!double.IsNaN(_stationOvLat) && !double.IsNaN(_stationOvLon))
175+
? $"at {_stationOvLat:F6}°, {_stationOvLon:F6}°"
176+
: "in relative mode";
177+
178+
_log($"Measuring at {_currentTargetAngle_deg:F1}° " +
179+
$"(encoder: {_rotator.CurrentAngle:F1}°, {locInfo}) " +
180+
$"- {_measurementsPerPoint} samples");
145181
}
146182
else
147183
{
@@ -171,15 +207,19 @@ private void OnUSBLRawData(object? sender, USBLRawDataEventArgs e)
171207

172208
if (_currentMeasurementCount >= _measurementsPerPoint)
173209
{
210+
// Останавливаем опрос на время поворота
211+
_azmManager.PauseInterrogation();
212+
174213
var pointsForAngle = _rawData
175214
.Where(p => Math.Abs(p.TargetAngle_deg - _currentTargetAngle_deg) < 0.1)
176215
.ToList();
177216

178217
if (pointsForAngle.Count > 0)
179218
{
180219
double avgHAngle = pointsForAngle.Average(p => p.HAngle_deg);
181-
_calibrationPairs.Add((_currentTargetAngle_deg, avgHAngle));
182-
_log($"Angle {_currentTargetAngle_deg:F1}° → avg azimuth = {avgHAngle:F2}°");
220+
// Сохраняем реальный угол энкодера, а не целевой
221+
_calibrationPairs.Add((_rotator.CurrentAngle, avgHAngle));
222+
_log($"Encoder {_rotator.CurrentAngle:F1}° → avg azimuth = {avgHAngle:F2}°");
183223
}
184224

185225
double nextAngle = _currentTargetAngle_deg + _stepAngle_deg;
@@ -197,6 +237,17 @@ private void OnUSBLRawData(object? sender, USBLRawDataEventArgs e)
197237
private void Complete()
198238
{
199239
_state = CalibrationState.Completed;
240+
241+
// Отключаем LocationOverride
242+
_azmManager.DisableLocationOverride();
243+
244+
// Возобновляем опрос в обычном режиме
245+
if (!_azmManager.InterrogationActive)
246+
{
247+
_azmManager.ResumeInterrogation();
248+
_log("Interrogation resumed");
249+
}
250+
200251
_log($"Calibration completed. {_calibrationPairs.Count} points collected.");
201252
SaveCalibrationData();
202253
}

‎src/Commands/CommandRegistration.cs‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -420,15 +420,17 @@ private static void RegisterCalibrationCommands(CommandRouter router, Applicatio
420420
Id = "SCAL",
421421
Category = "Calibration",
422422
Sources = "T,R,W",
423-
Parameters = "start=N,step=N,n=N",
423+
Parameters = "start=N,step=N,n=N,lt=N,ln=N",
424424
Response = "SCAL,OK",
425-
Description = "Start antenna calibration with rotator (default: start=0,step=15,n=20)"
425+
Description = "Start antenna calibration with rotator (default: start=0,step=15,n=20,lt=nan,ln=nan)"
426426
}, async (args, ctx) =>
427427
{
428428
var start = args.TryGetValue("start", out var s) ? double.Parse(s, CultureInfo.InvariantCulture) : 0.0;
429429
var step = args.TryGetValue("step", out var st) ? double.Parse(st, CultureInfo.InvariantCulture) : 15.0;
430430
var n = args.TryGetValue("n", out var sn) ? int.Parse(sn) : 20;
431-
runtime.StartCalibration(start, step, n);
431+
var stLt = args.TryGetValue("lt", out var lt) ? double.Parse(lt, CultureInfo.InvariantCulture) : double.NaN;
432+
var stLn = args.TryGetValue("ln", out var ln) ? double.Parse(ln, CultureInfo.InvariantCulture) : double.NaN;
433+
runtime.StartCalibration(start, step, n, stLt, stLn);
432434
return CommandResult.Ok();
433435
});
434436

0 commit comments

Comments
 (0)