This commit is contained in:
@@ -59,8 +59,11 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
||||
{
|
||||
this.Hide();
|
||||
form.ShowDialog();
|
||||
this.Show();
|
||||
this.Activate();
|
||||
if (!this.IsDisposed)
|
||||
{
|
||||
this.Show();
|
||||
this.Activate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user