This commit is contained in:
xyy
2026-01-10 10:03:08 +08:00
parent a4c8562e09
commit 080e9ca57f
5 changed files with 129 additions and 92 deletions

View File

@@ -59,8 +59,11 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
this.Hide();
form.ShowDialog();
this.Show();
this.Activate();
if (!this.IsDisposed)
{
this.Show();
this.Activate();
}
}
}

View File

@@ -792,9 +792,9 @@
//
statusStrip1.ImageScalingSize = new Size(24, 24);
statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1 });
statusStrip1.Location = new Point(0, 382);
statusStrip1.Location = new Point(0, 387);
statusStrip1.Name = "statusStrip1";
statusStrip1.Size = new Size(1114, 31);
statusStrip1.Size = new Size(1114, 26);
statusStrip1.TabIndex = 22;
statusStrip1.Text = "statusStrip1";
//
@@ -802,7 +802,7 @@
//
toolStripStatusLabel1.BackColor = Color.Red;
toolStripStatusLabel1.Name = "toolStripStatusLabel1";
toolStripStatusLabel1.Size = new Size(118, 24);
toolStripStatusLabel1.Size = new Size(99, 20);
toolStripStatusLabel1.Text = "功率计未连接";
//
// uiLabel25
@@ -1554,6 +1554,7 @@
TitleFont = new Font("微软雅黑", 12F, FontStyle.Bold, GraphicsUnit.Point, 134);
TitleHeight = 60;
ZoomScaleRect = new Rectangle(22, 22, 800, 450);
FormClosing += PrimaryIgnitionForm_FormClosing;
FormClosed += PenetrationForm_FormClosed;
Load += PenetrationForm_Load;
uiTableLayoutPanel1.ResumeLayout(false);

View File

@@ -62,7 +62,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
var timer = new System.Windows.Forms.Timer()
{
Interval = 100,
Interval = 200,
};
timer.Tick += async (s, e) =>
{
@@ -91,7 +91,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
await WriteDataAsync();
WriteDataAsync();
}
catch { }
}
@@ -101,7 +101,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
}
private async System.Threading.Tasks.Task WriteDataAsync()
private void WriteDataAsync()
{
try
{
@@ -110,7 +110,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
return;
}
float value = float.Parse(uiLabel23.Text);
await _modbusMaster.WriteMultipleRegistersAsync(1, 74, c.SplitFloatToUShortArray((float)value));
_modbusMaster.WriteMultipleRegistersAsync(1, 74, c.SplitFloatToUShortArray((float)value));
//});
}
@@ -126,6 +126,11 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
if (this.IsDisposed || !this.IsHandleCreated)
{
return;
}
if (_modbusMaster == null || _tcpClient == null || !_tcpClient.Connected)
{
return;
@@ -157,6 +162,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
catch (Exception ex)
{
//ShowError($"读取数据失败:{ex.Message}");
MessageBox.Show(ex.Message);
}
}
@@ -166,18 +173,35 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
try
{
var modbusMaster = _modbusMaster;
if (modbusMaster == null) return;
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
.ConfigureAwait(false);
if (registers == null || registers.Length == 0)
// 简化连接检查
if (_tcpClient == null || _modbusMaster == null)
{
System.Diagnostics.Debug.WriteLine($"读取地址{address}失败:未获取到有效寄存器数据");
return;
}
// 检查TCP连接状态简化版
bool isConnected = false;
try
{
isConnected = _tcpClient != null && _tcpClient.Connected;
}
catch
{
isConnected = false;
}
if (!isConnected)
{
// 不再输出调试信息,避免频繁输出
return;
}
var modbusMaster = _modbusMaster;
var result = modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length).Result;
ushort[] registers = result;
if (registers == null || registers.Length == 0) return;
string text;
if (registers.Length >= 2 && length >= 2)
{
@@ -196,20 +220,18 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
UpdateControlText(control, text);
}
catch (OperationCanceledException)
catch (Exception ex) when (ex is SocketException ||
ex is ObjectDisposedException ||
ex is InvalidOperationException ||
ex is TimeoutException)
{
return;
// 静默处理异常
Debug.WriteLine($"地址{address}: {ex.GetType().Name}");
}
catch (Exception ex) when (ex is TimeoutException ||
ex is InvalidOperationException ||
ex.Message.Contains("Modbus", StringComparison.OrdinalIgnoreCase))
catch (Exception ex)
{
Debug.WriteLine($"Modbus通信错误 - 地址{address}: {ex.Message}");
UpdateControlText(control, "通信错误");
}
catch (ObjectDisposedException)
{
return;
// 其他异常也静默处理避免干扰UI
Debug.WriteLine($"地址{address}: {ex.Message}");
}
}
private void UpdateControlText(Label control, string text)
@@ -240,27 +262,32 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
bool[] registers1 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 4, 1);//是否自熄
});
// 修复1移除 ? 操作符,先检查是否为 null
if (_modbusMaster == null) return;
bool[] registers1 = await _modbusMaster.ReadCoilsAsync(1, 4, 1);
if (registers1 != null && registers1.Length >= 1)
{
bool value1 = registers1[0];
this.Invoke(new Action(() =>
{
if (value1)
{
uiLight1.State = UILightState.On;
}
else
// 修复2添加控件句柄检查
if (uiLight1.IsDisposed || !uiLight1.IsHandleCreated)
return;
if (uiLight1.InvokeRequired)
{
uiLight1.Invoke(new Action(() =>
{
uiLight1.State = UILightState.Off;
}
}));
// 再次检查,防止回调执行时控件已被销毁
if (!uiLight1.IsDisposed && uiLight1.IsHandleCreated)
uiLight1.State = value1 ? UILightState.On : UILightState.Off;
}));
}
else
{
uiLight1.State = value1 ? UILightState.On : UILightState.Off;
}
}
}
catch (Exception ex)
@@ -270,35 +297,38 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
try
{
bool[] registers2 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 10, 1);//是否复位
});
// 修复3添加 null 检查
if (_modbusMaster == null) return;
bool[] registers2 = await _modbusMaster.ReadCoilsAsync(1, 10, 1);//是否复位
if (registers2 != null && registers2.Length >= 1)
{
bool value2 = registers2[0];
this.Invoke(new Action(() =>
// 修复4添加控件句柄检查
if (uiLight3.IsDisposed || !uiLight3.IsHandleCreated)
return;
if (uiLight3.InvokeRequired)
{
if (value2)
uiLight3.Invoke(new Action(() =>
{
uiLight3.State = UILightState.On;
}
else
{
uiLight3.State = UILightState.Off;
}
}));
// 再次检查,防止回调执行时控件已被销毁
if (!uiLight3.IsDisposed && uiLight3.IsHandleCreated)
uiLight3.State = value2 ? UILightState.On : UILightState.Off;
}));
}
else
{
uiLight3.State = value2 ? UILightState.On : UILightState.Off;
}
}
}
catch (Exception ex)
{
Debug.WriteLine($"读取状态3失败: {ex.Message}");
}
}
private bool _lastRunStatus = false;
@@ -307,12 +337,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
bool[] registers3 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 81, 1);
});
bool[] registers3 = await _modbusMaster?.ReadCoilsAsync(1, 81, 1);
if (registers3 != null && registers3.Length >= 1)
{
bool currentRunStatus = registers3[0];
@@ -353,10 +379,15 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
_readtimer?.Stop();
Debug.WriteLine($"读取状态失败: {ex.Message}");
}
//finally { _asyncLock.Release(); }
}
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)
{
if (_modbusMaster == null) return null;
@@ -932,7 +963,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
// 跨线程更新UI异步方法中仍需检查Invoke避免跨线程异常
if (uiLabel25.IsDisposed || !uiLabel25.IsHandleCreated)
return;
if (uiLabel29.InvokeRequired)
{
uiLabel29.Invoke(new Action(() =>
@@ -1076,6 +1108,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
private void uiButton1_Click(object sender, EventArgs e)
{
ma?.BtnClickFunctionForNew(Function.ButtonType., 80);//开始测试
}
private void uiButton2_Click(object sender, EventArgs e)
@@ -1620,5 +1653,16 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
}
private void PrimaryIgnitionForm_FormClosing(object sender, FormClosingEventArgs e)
{
// 停止定时器
if (_readtimer != null)
{
_readtimer.Stop();
_readtimer.Dispose();
_readtimer = null;
}
}
}
}

View File

@@ -160,8 +160,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
var modbusMaster = _modbusMaster;
if (modbusMaster == null) return;
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
.ConfigureAwait(false);
ushort[] registers = modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length).Result;
if (registers == null || registers.Length == 0)
{
@@ -231,12 +231,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
bool[] registers1 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 10, 1);
});
bool[] registers1 = await _modbusMaster?.ReadCoilsAsync(1, 10, 1);
if (registers1 != null && registers1.Length >= 1)
{
bool value = registers1[0];
@@ -268,12 +264,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
bool[] registers2 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 51, 1);
});
bool[] registers2 = _modbusMaster?.ReadCoilsAsync(1, 51, 1).Result;
if (registers2 != null && registers2.Length >= 1)
{

View File

@@ -113,8 +113,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
var modbusMaster = _modbusMaster;
if (modbusMaster == null) return;
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
.ConfigureAwait(false);
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length);
if (registers == null || registers.Length == 0)
{
@@ -251,12 +251,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
{
try
{
bool[] registers2 = await Task.Run(async () =>
{
if (_modbusMaster == null)
return null;
return await _modbusMaster?.ReadCoilsAsync(1, 301, 1);
});
bool[] registers2 = await _modbusMaster?.ReadCoilsAsync(1, 301, 1);
if (registers2 != null && registers2.Length >= 1)
{
bool currentRunStatus = registers2[0];
@@ -298,9 +294,10 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Debug.WriteLine($"读取状态失败: {ex.Message}");
}
finally { _asyncLock.Release(); }
}
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)