更新
This commit is contained in:
@@ -38,6 +38,8 @@ namespace COFTester.Resources
|
||||
["StartTest"] = "开始测试",
|
||||
["Stop"] = "停止",
|
||||
["ResetSystem"] = "复位",
|
||||
["Resetting"] = "复位中",
|
||||
["ResetComplete"] = "复位",
|
||||
["Connect"] = "连接",
|
||||
["Disconnect"] = "断开",
|
||||
["Reconnect"] = "重新连接",
|
||||
@@ -186,6 +188,8 @@ namespace COFTester.Resources
|
||||
["StartTest"] = "Start Test",
|
||||
["Stop"] = "Stop",
|
||||
["ResetSystem"] = "Reset System",
|
||||
["Resetting"] = "Resetting",
|
||||
["ResetComplete"] = "Reset",
|
||||
["Connect"] = "Connect",
|
||||
["Disconnect"] = "Disconnect",
|
||||
["Reconnect"] = "Reconnect",
|
||||
@@ -344,6 +348,8 @@ namespace COFTester.Resources
|
||||
public string StartTest => GetString("StartTest");
|
||||
public string Stop => GetString("Stop");
|
||||
public string ResetSystem => GetString("ResetSystem");
|
||||
public string Resetting => GetString("Resetting");
|
||||
public string ResetComplete => GetString("ResetComplete");
|
||||
public string TestParameters => GetString("TestParameters");
|
||||
public string Standard => GetString("Standard");
|
||||
public string SledMass => GetString("SledMass");
|
||||
@@ -485,6 +491,8 @@ namespace COFTester.Resources
|
||||
OnPropertyChanged(nameof(StartTest));
|
||||
OnPropertyChanged(nameof(Stop));
|
||||
OnPropertyChanged(nameof(ResetSystem));
|
||||
OnPropertyChanged(nameof(Resetting));
|
||||
OnPropertyChanged(nameof(ResetComplete));
|
||||
OnPropertyChanged(nameof(TestParameters));
|
||||
OnPropertyChanged(nameof(Standard));
|
||||
OnPropertyChanged(nameof(SledMass));
|
||||
|
||||
@@ -221,6 +221,47 @@ namespace COFTester.Services
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 切换型复位按钮 - 使用 NModbus 3.0.81 API
|
||||
/// 实现方式:读取当前状态 → 写入相反状态 → 延迟 100ms
|
||||
/// 参考:case ButtonType.切换型
|
||||
/// </summary>
|
||||
/// <param name="address">线圈地址(例如:M1301)</param>
|
||||
/// <returns>返回操作是否成功</returns>
|
||||
public virtual async Task<bool> ToggleResetAsync(ushort address)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_modbusMaster != null && _isConnected)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine($"[Modbus] 开始切换型复位操作 - 地址: {address}");
|
||||
|
||||
// 1. 读取当前线圈状态
|
||||
var coils = await _modbusMaster.ReadCoilsAsync(1, address, 1);
|
||||
bool currentState = coils[0];
|
||||
System.Diagnostics.Debug.WriteLine($"[Modbus] 当前状态: {currentState}");
|
||||
|
||||
// 2. 写入相反状态
|
||||
bool newState = !currentState;
|
||||
await _modbusMaster.WriteSingleCoilAsync(1, address, newState);
|
||||
System.Diagnostics.Debug.WriteLine($"[Modbus] 写入新状态: {newState}");
|
||||
|
||||
// 3. 延迟 100ms 确保 PLC 处理完成
|
||||
await Task.Delay(100);
|
||||
|
||||
System.Diagnostics.Debug.WriteLine($"[Modbus] 切换型复位操作完成");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnErrorOccurred($"切换型复位失败: {ex.Message}");
|
||||
System.Diagnostics.Debug.WriteLine($"[Modbus] 切换型复位异常: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 零點標定,向 M1300 寫入脉冲信号(复归型按钮)
|
||||
/// 实现方式:写入 true → 延迟 100ms → 写入 false → 延迟 100ms
|
||||
|
||||
@@ -40,6 +40,7 @@ namespace COFTester.ViewModels
|
||||
private int _testCounter = 0;
|
||||
private bool _disposed = false;
|
||||
private string _selectedDirection = ""; // 选中的方向:Up/Down/Right/Left
|
||||
private string _resetButtonText; // 复位按钮文本
|
||||
|
||||
public MainViewModel(IDataAcquisitionService daqService, DataProcessingService processingService, AppConfig config)
|
||||
{
|
||||
@@ -50,6 +51,7 @@ namespace COFTester.ViewModels
|
||||
|
||||
// 初始化状态消息
|
||||
_statusMessage = LanguageResources.Instance.SystemReady;
|
||||
_resetButtonText = LanguageResources.Instance.ResetSystem;
|
||||
|
||||
// 訂閱數據採集服務事件
|
||||
_daqService.DataReceived += OnDataReceived;
|
||||
@@ -410,6 +412,12 @@ namespace COFTester.ViewModels
|
||||
get => _currentDateTime;
|
||||
set { _currentDateTime = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
public string ResetButtonText
|
||||
{
|
||||
get => _resetButtonText;
|
||||
set { _resetButtonText = value; OnPropertyChanged(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -637,16 +645,60 @@ namespace COFTester.ViewModels
|
||||
StatusMessage = Lang.TestStopped;
|
||||
}
|
||||
|
||||
private void Reset()
|
||||
private async void Reset()
|
||||
{
|
||||
_realTimePoints.Clear();
|
||||
OnPropertyChanged(nameof(DataPointsCount));
|
||||
LatestResult = null;
|
||||
CurrentForce = 0;
|
||||
CurrentDisp = 0;
|
||||
StatusMessage = Lang.SystemReset;
|
||||
UpdateScottPlot();
|
||||
_daqService.ResetSensors();
|
||||
try
|
||||
{
|
||||
// 1. 更新按钮文本为"复位中"
|
||||
ResetButtonText = Lang.Resetting;
|
||||
StatusMessage = Lang.Resetting;
|
||||
|
||||
// 2. 清除界面数据
|
||||
_realTimePoints.Clear();
|
||||
OnPropertyChanged(nameof(DataPointsCount));
|
||||
LatestResult = null;
|
||||
CurrentForce = 0;
|
||||
CurrentDisp = 0;
|
||||
UpdateScottPlot();
|
||||
|
||||
// 3. 执行切换型复位操作(使用 NModbus 3.0.81 API)
|
||||
// 复位线圈地址为 M90
|
||||
const ushort RESET_COIL_ADDRESS = 90;
|
||||
|
||||
if (_daqService is ModbusServiceBase modbusService)
|
||||
{
|
||||
bool success = await modbusService.ToggleResetAsync(RESET_COIL_ADDRESS);
|
||||
|
||||
if (success)
|
||||
{
|
||||
StatusMessage = Lang.SystemReset;
|
||||
}
|
||||
else
|
||||
{
|
||||
StatusMessage = "复位失败";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 兼容旧的复位方式
|
||||
_daqService.ResetSensors();
|
||||
StatusMessage = Lang.SystemReset;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
StatusMessage = $"复位异常: {ex.Message}";
|
||||
System.Diagnostics.Debug.WriteLine($"[Reset] 异常: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// 4. 恢复按钮文本为"复位"
|
||||
ResetButtonText = Lang.ResetComplete;
|
||||
|
||||
// 延迟 500ms 后恢复原始文本
|
||||
await Task.Delay(500);
|
||||
ResetButtonText = Lang.ResetSystem;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -982,6 +1034,10 @@ namespace COFTester.ViewModels
|
||||
StatusMessage = Lang.Testing;
|
||||
else if (_statusMessage.Contains("分析完成") || _statusMessage.Contains("Analysis Completed"))
|
||||
StatusMessage = Lang.AnalysisCompleted;
|
||||
|
||||
// 更新复位按钮文本
|
||||
if (!_isTesting)
|
||||
ResetButtonText = Lang.ResetSystem;
|
||||
}
|
||||
|
||||
private void OpenConfig()
|
||||
|
||||
@@ -260,8 +260,8 @@
|
||||
Height="70" Width="110" Background="#27AE60"
|
||||
Style="{StaticResource IndustrialButtonStyle}" Margin="5"/>
|
||||
|
||||
<!-- 复位按钮 -->
|
||||
<Button Content="{Binding Lang.ResetSystem}" Command="{Binding ResetCommand}"
|
||||
<!-- 复位按钮 - 动态显示状态:复位 → 复位中 → 复位 -->
|
||||
<Button Content="{Binding ResetButtonText}" Command="{Binding ResetCommand}"
|
||||
Height="70" Width="110" Background="#3498DB"
|
||||
Style="{StaticResource IndustrialButtonStyle}" Margin="5"/>
|
||||
</StackPanel>
|
||||
|
||||
Reference in New Issue
Block a user