更新
This commit is contained in:
@@ -499,9 +499,18 @@ namespace COFTester.Services
|
||||
protected abstract Task WriteDirectionRegisterAsync(ushort register, ushort value);
|
||||
|
||||
/// <summary>
|
||||
/// 寫入測試參數到 PLC 寄存器
|
||||
/// 寫入測試參數到 PLC 寄存器(受保护方法)
|
||||
/// </summary>
|
||||
protected abstract Task WriteTestParametersAsync(TestParameters parameters);
|
||||
|
||||
/// <summary>
|
||||
/// 公开方法:写入测试参数到 PLC 寄存器
|
||||
/// 供外部调用(如 ViewModel 在应用配置时调用)
|
||||
/// </summary>
|
||||
public async Task WriteTestParametersPublicAsync(TestParameters parameters)
|
||||
{
|
||||
await WriteTestParametersAsync(parameters);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 將兩個寄存器轉換為 Float (IEEE 754 Big-Endian)
|
||||
@@ -645,30 +654,29 @@ namespace COFTester.Services
|
||||
{
|
||||
try
|
||||
{
|
||||
// 1. 寫入測試參數到 PLC
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusTCP] 開始寫入測試參數...");
|
||||
await WriteTestParametersAsync(parameters);
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusTCP] 測試參數寫入完成");
|
||||
// ===== 关键修改:移除测试开始时的参数写入 =====
|
||||
// 参数只在"应用配置"时写入,测试时不再重复写入
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusTCP] 开始数据采集(参数已在配置时写入)");
|
||||
|
||||
// 短暫延遲確保 PLC 處理完參數
|
||||
// 短暂延迟确保系统准备就绪
|
||||
await Task.Delay(100, token);
|
||||
|
||||
// 2. 循環讀取傳感器數據(不再發送 Start 命令)
|
||||
// 循环读取传感器数据(不再发送 Start 命令)
|
||||
double intervalMs = 1000.0 / parameters.SamplingRate;
|
||||
int totalPoints = (int)(parameters.TestDuration * parameters.SamplingRate);
|
||||
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 開始數據採集: {totalPoints} 點, 間隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 注意:請使用方向控制按鈕(M0-M3)來啟動運動");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 数据采集配置: {totalPoints} 点, 间隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 注意:使用 M31=1 启动测试,M31=0 停止测试");
|
||||
|
||||
// 3. 循環讀取傳感器數據(包含力值、位移和位置)
|
||||
// 循环读取传感器数据(包含力值、位移和位置)
|
||||
for (int i = 0; i < totalPoints && !token.IsCancellationRequested; i++)
|
||||
{
|
||||
// 讀取力值和位移
|
||||
// 读取力值和位移
|
||||
var dataPoint = await ReadSensorDataAsync();
|
||||
|
||||
if (dataPoint != null)
|
||||
{
|
||||
// 讀取升降位置和水平位置
|
||||
// 读取升降位置和水平位置
|
||||
try
|
||||
{
|
||||
var (verticalPos, horizontalPos) = await ReadPositionDataAsync();
|
||||
@@ -677,8 +685,8 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 讀取位置數據失敗: {ex.Message}");
|
||||
// 位置讀取失敗不影響主數據採集,繼續執行
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusTCP] 读取位置数据失败: {ex.Message}");
|
||||
// 位置读取失败不影响主数据采集,继续执行
|
||||
dataPoint.VerticalPosition = 0;
|
||||
dataPoint.HorizontalPosition = 0;
|
||||
}
|
||||
@@ -690,7 +698,7 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusTCP] 測試被取消");
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusTCP] 测试被取消");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1103,30 +1111,29 @@ namespace COFTester.Services
|
||||
{
|
||||
try
|
||||
{
|
||||
// 1. 寫入測試參數到 PLC
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusRTU] 開始寫入測試參數...");
|
||||
await WriteTestParametersAsync(parameters);
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusRTU] 測試參數寫入完成");
|
||||
// ===== 关键修改:移除测试开始时的参数写入 =====
|
||||
// 参数只在"应用配置"时写入,测试时不再重复写入
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusRTU] 开始数据采集(参数已在配置时写入)");
|
||||
|
||||
// 短暫延遲確保 PLC 處理完參數
|
||||
// 短暂延迟确保系统准备就绪
|
||||
await Task.Delay(100, token);
|
||||
|
||||
// 2. 循環讀取傳感器數據(不再發送 Start 命令)
|
||||
// 循环读取传感器数据(不再发送 Start 命令)
|
||||
double intervalMs = 1000.0 / parameters.SamplingRate;
|
||||
int totalPoints = (int)(parameters.TestDuration * parameters.SamplingRate);
|
||||
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 開始數據採集: {totalPoints} 點, 間隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 注意:請使用方向控制按鈕(M0-M3)來啟動運動");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 数据采集配置: {totalPoints} 点, 间隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 注意:使用 M31=1 启动测试,M31=0 停止测试");
|
||||
|
||||
// 3. 循環讀取傳感器數據(包含力值、位移和位置)
|
||||
// 循环读取传感器数据(包含力值、位移和位置)
|
||||
for (int i = 0; i < totalPoints && !token.IsCancellationRequested; i++)
|
||||
{
|
||||
// 讀取力值和位移
|
||||
// 读取力值和位移
|
||||
var dataPoint = await ReadSensorDataAsync();
|
||||
|
||||
if (dataPoint != null)
|
||||
{
|
||||
// 讀取升降位置和水平位置
|
||||
// 读取升降位置和水平位置
|
||||
try
|
||||
{
|
||||
var (verticalPos, horizontalPos) = await ReadPositionDataAsync();
|
||||
@@ -1135,8 +1142,8 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 讀取位置數據失敗: {ex.Message}");
|
||||
// 位置讀取失敗不影響主數據採集,繼續執行
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusRTU] 读取位置数据失败: {ex.Message}");
|
||||
// 位置读取失败不影响主数据采集,继续执行
|
||||
dataPoint.VerticalPosition = 0;
|
||||
dataPoint.HorizontalPosition = 0;
|
||||
}
|
||||
@@ -1148,7 +1155,7 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusRTU] 測試被取消");
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusRTU] 测试被取消");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1545,29 +1552,28 @@ namespace COFTester.Services
|
||||
{
|
||||
try
|
||||
{
|
||||
// 1. 寫入測試參數到 PLC
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 開始寫入測試參數...");
|
||||
await WriteTestParametersAsync(parameters);
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 測試參數寫入完成");
|
||||
// ===== 关键修改:移除测试开始时的参数写入 =====
|
||||
// 参数只在"应用配置"时写入,测试时不再重复写入
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 开始数据采集(参数已在配置时写入)");
|
||||
|
||||
await Task.Delay(100, token);
|
||||
|
||||
// 2. 循環讀取傳感器數據(不再發送 Start 命令)
|
||||
// 循环读取传感器数据(不再发送 Start 命令)
|
||||
double intervalMs = 1000.0 / parameters.SamplingRate;
|
||||
int totalPoints = (int)(parameters.TestDuration * parameters.SamplingRate);
|
||||
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 開始數據採集: {totalPoints} 點, 間隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 注意:請使用方向控制按鈕(M0-M3)來啟動運動");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 数据采集配置: {totalPoints} 点, 间隔 {intervalMs:F1}ms");
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 注意:使用 M31=1 启动测试,M31=0 停止测试");
|
||||
|
||||
// 3. 循環讀取傳感器數據(包含力值、位移和位置)
|
||||
// 循环读取传感器数据(包含力值、位移和位置)
|
||||
for (int i = 0; i < totalPoints && !token.IsCancellationRequested; i++)
|
||||
{
|
||||
// 讀取力值和位移
|
||||
// 读取力值和位移
|
||||
var dataPoint = await ReadSensorDataAsync();
|
||||
|
||||
if (dataPoint != null)
|
||||
{
|
||||
// 讀取升降位置和水平位置
|
||||
// 读取升降位置和水平位置
|
||||
try
|
||||
{
|
||||
var (verticalPos, horizontalPos) = await ReadPositionDataAsync();
|
||||
@@ -1576,8 +1582,8 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 讀取位置數據失敗: {ex.Message}");
|
||||
// 位置讀取失敗不影響主數據採集,繼續執行
|
||||
System.Diagnostics.Debug.WriteLine($"[ModbusASCII] 读取位置数据失败: {ex.Message}");
|
||||
// 位置读取失败不影响主数据采集,继续执行
|
||||
dataPoint.VerticalPosition = 0;
|
||||
dataPoint.HorizontalPosition = 0;
|
||||
}
|
||||
@@ -1589,7 +1595,7 @@ namespace COFTester.Services
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 測試被取消");
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 测试被取消");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1598,7 +1604,7 @@ namespace COFTester.Services
|
||||
finally
|
||||
{
|
||||
_isAcquiring = false;
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 數據採集結束(不再發送 Stop 命令)");
|
||||
System.Diagnostics.Debug.WriteLine("[ModbusASCII] 数据采集结束(不再发送 Stop 命令)");
|
||||
OnTestFinished();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1078,7 +1078,7 @@ namespace COFTester.ViewModels
|
||||
private void OpenConfig()
|
||||
{
|
||||
var configViewModel = new ConfigViewModel(Parameters, _daqService);
|
||||
configViewModel.ConfigApplied += (s, newParams) =>
|
||||
configViewModel.ConfigApplied += async (s, newParams) =>
|
||||
{
|
||||
// 更新測試參數
|
||||
Parameters.Standard = newParams.Standard;
|
||||
@@ -1108,7 +1108,28 @@ namespace COFTester.ViewModels
|
||||
Parameters.DirectionLeft = newParams.DirectionLeft;
|
||||
|
||||
OnPropertyChanged(nameof(Parameters));
|
||||
StatusMessage = Lang.SystemReady;
|
||||
|
||||
// ===== 关键修改:只在应用配置时写入参数到寄存器 =====
|
||||
if (IsConnected && _daqService is ModbusServiceBase modbusService)
|
||||
{
|
||||
try
|
||||
{
|
||||
StatusMessage = "正在写入配置参数到设备...";
|
||||
await modbusService.WriteTestParametersPublicAsync(Parameters);
|
||||
StatusMessage = "配置参数已应用并写入设备";
|
||||
System.Diagnostics.Debug.WriteLine("[ViewModel] 配置参数已写入寄存器");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
StatusMessage = $"写入参数失败: {ex.Message}";
|
||||
System.Diagnostics.Debug.WriteLine($"[ViewModel] 写入参数失败: {ex.Message}");
|
||||
MessageBox.Show($"写入参数到设备失败:\n{ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusMessage = Lang.SystemReady;
|
||||
}
|
||||
};
|
||||
|
||||
var configWindow = new Views.ConfigWindow(configViewModel)
|
||||
|
||||
Reference in New Issue
Block a user