This commit is contained in:
@@ -59,10 +59,13 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
this.Hide();
|
this.Hide();
|
||||||
form.ShowDialog();
|
form.ShowDialog();
|
||||||
|
if (!this.IsDisposed)
|
||||||
|
{
|
||||||
this.Show();
|
this.Show();
|
||||||
this.Activate();
|
this.Activate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -792,9 +792,9 @@
|
|||||||
//
|
//
|
||||||
statusStrip1.ImageScalingSize = new Size(24, 24);
|
statusStrip1.ImageScalingSize = new Size(24, 24);
|
||||||
statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1 });
|
statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1 });
|
||||||
statusStrip1.Location = new Point(0, 382);
|
statusStrip1.Location = new Point(0, 387);
|
||||||
statusStrip1.Name = "statusStrip1";
|
statusStrip1.Name = "statusStrip1";
|
||||||
statusStrip1.Size = new Size(1114, 31);
|
statusStrip1.Size = new Size(1114, 26);
|
||||||
statusStrip1.TabIndex = 22;
|
statusStrip1.TabIndex = 22;
|
||||||
statusStrip1.Text = "statusStrip1";
|
statusStrip1.Text = "statusStrip1";
|
||||||
//
|
//
|
||||||
@@ -802,7 +802,7 @@
|
|||||||
//
|
//
|
||||||
toolStripStatusLabel1.BackColor = Color.Red;
|
toolStripStatusLabel1.BackColor = Color.Red;
|
||||||
toolStripStatusLabel1.Name = "toolStripStatusLabel1";
|
toolStripStatusLabel1.Name = "toolStripStatusLabel1";
|
||||||
toolStripStatusLabel1.Size = new Size(118, 24);
|
toolStripStatusLabel1.Size = new Size(99, 20);
|
||||||
toolStripStatusLabel1.Text = "功率计未连接";
|
toolStripStatusLabel1.Text = "功率计未连接";
|
||||||
//
|
//
|
||||||
// uiLabel25
|
// uiLabel25
|
||||||
@@ -1554,6 +1554,7 @@
|
|||||||
TitleFont = new Font("微软雅黑", 12F, FontStyle.Bold, GraphicsUnit.Point, 134);
|
TitleFont = new Font("微软雅黑", 12F, FontStyle.Bold, GraphicsUnit.Point, 134);
|
||||||
TitleHeight = 60;
|
TitleHeight = 60;
|
||||||
ZoomScaleRect = new Rectangle(22, 22, 800, 450);
|
ZoomScaleRect = new Rectangle(22, 22, 800, 450);
|
||||||
|
FormClosing += PrimaryIgnitionForm_FormClosing;
|
||||||
FormClosed += PenetrationForm_FormClosed;
|
FormClosed += PenetrationForm_FormClosed;
|
||||||
Load += PenetrationForm_Load;
|
Load += PenetrationForm_Load;
|
||||||
uiTableLayoutPanel1.ResumeLayout(false);
|
uiTableLayoutPanel1.ResumeLayout(false);
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
var timer = new System.Windows.Forms.Timer()
|
var timer = new System.Windows.Forms.Timer()
|
||||||
{
|
{
|
||||||
Interval = 100,
|
Interval = 200,
|
||||||
};
|
};
|
||||||
timer.Tick += async (s, e) =>
|
timer.Tick += async (s, e) =>
|
||||||
{
|
{
|
||||||
@@ -91,7 +91,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await WriteDataAsync();
|
WriteDataAsync();
|
||||||
}
|
}
|
||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async System.Threading.Tasks.Task WriteDataAsync()
|
private void WriteDataAsync()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -110,7 +110,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
float value = float.Parse(uiLabel23.Text);
|
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
|
try
|
||||||
{
|
{
|
||||||
|
if (this.IsDisposed || !this.IsHandleCreated)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_modbusMaster == null || _tcpClient == null || !_tcpClient.Connected)
|
if (_modbusMaster == null || _tcpClient == null || !_tcpClient.Connected)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -157,6 +162,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
//ShowError($"读取数据失败:{ex.Message}");
|
//ShowError($"读取数据失败:{ex.Message}");
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,18 +173,35 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var modbusMaster = _modbusMaster;
|
// 简化连接检查
|
||||||
if (modbusMaster == null) return;
|
if (_tcpClient == null || _modbusMaster == null)
|
||||||
|
|
||||||
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
|
|
||||||
.ConfigureAwait(false);
|
|
||||||
|
|
||||||
if (registers == null || registers.Length == 0)
|
|
||||||
{
|
{
|
||||||
System.Diagnostics.Debug.WriteLine($"读取地址{address}失败:未获取到有效寄存器数据");
|
|
||||||
return;
|
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;
|
string text;
|
||||||
if (registers.Length >= 2 && length >= 2)
|
if (registers.Length >= 2 && length >= 2)
|
||||||
{
|
{
|
||||||
@@ -196,20 +220,18 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
|
|
||||||
UpdateControlText(control, text);
|
UpdateControlText(control, text);
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (Exception ex) when (ex is SocketException ||
|
||||||
{
|
ex is ObjectDisposedException ||
|
||||||
return;
|
|
||||||
}
|
|
||||||
catch (Exception ex) when (ex is TimeoutException ||
|
|
||||||
ex is InvalidOperationException ||
|
ex is InvalidOperationException ||
|
||||||
ex.Message.Contains("Modbus", StringComparison.OrdinalIgnoreCase))
|
ex is TimeoutException)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Modbus通信错误 - 地址{address}: {ex.Message}");
|
// 静默处理异常
|
||||||
UpdateControlText(control, "通信错误");
|
Debug.WriteLine($"地址{address}: {ex.GetType().Name}");
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
return;
|
// 其他异常也静默处理,避免干扰UI
|
||||||
|
Debug.WriteLine($"地址{address}: {ex.Message}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void UpdateControlText(Label control, string text)
|
private void UpdateControlText(Label control, string text)
|
||||||
@@ -240,27 +262,32 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers1 = await Task.Run(async () =>
|
// 修复1:移除 ? 操作符,先检查是否为 null
|
||||||
{
|
if (_modbusMaster == null) return;
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
bool[] registers1 = await _modbusMaster.ReadCoilsAsync(1, 4, 1);
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 4, 1);//是否自熄
|
|
||||||
});
|
|
||||||
if (registers1 != null && registers1.Length >= 1)
|
if (registers1 != null && registers1.Length >= 1)
|
||||||
{
|
{
|
||||||
bool value1 = registers1[0];
|
bool value1 = registers1[0];
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
if (value1)
|
|
||||||
{
|
|
||||||
uiLight1.State = UILightState.On;
|
|
||||||
|
|
||||||
|
// 修复2:添加控件句柄检查
|
||||||
|
if (uiLight1.IsDisposed || !uiLight1.IsHandleCreated)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (uiLight1.InvokeRequired)
|
||||||
|
{
|
||||||
|
uiLight1.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
// 再次检查,防止回调执行时控件已被销毁
|
||||||
|
if (!uiLight1.IsDisposed && uiLight1.IsHandleCreated)
|
||||||
|
uiLight1.State = value1 ? UILightState.On : UILightState.Off;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uiLight1.State = UILightState.Off;
|
uiLight1.State = value1 ? UILightState.On : UILightState.Off;
|
||||||
}
|
}
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -270,35 +297,38 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers2 = await Task.Run(async () =>
|
// 修复3:添加 null 检查
|
||||||
{
|
if (_modbusMaster == null) return;
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
bool[] registers2 = await _modbusMaster.ReadCoilsAsync(1, 10, 1);//是否复位
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 10, 1);//是否复位
|
|
||||||
});
|
|
||||||
if (registers2 != null && registers2.Length >= 1)
|
if (registers2 != null && registers2.Length >= 1)
|
||||||
{
|
{
|
||||||
bool value2 = registers2[0];
|
bool value2 = registers2[0];
|
||||||
this.Invoke(new Action(() =>
|
|
||||||
{
|
|
||||||
if (value2)
|
|
||||||
{
|
|
||||||
uiLight3.State = UILightState.On;
|
|
||||||
|
|
||||||
|
// 修复4:添加控件句柄检查
|
||||||
|
if (uiLight3.IsDisposed || !uiLight3.IsHandleCreated)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (uiLight3.InvokeRequired)
|
||||||
|
{
|
||||||
|
uiLight3.Invoke(new Action(() =>
|
||||||
|
{
|
||||||
|
// 再次检查,防止回调执行时控件已被销毁
|
||||||
|
if (!uiLight3.IsDisposed && uiLight3.IsHandleCreated)
|
||||||
|
uiLight3.State = value2 ? UILightState.On : UILightState.Off;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uiLight3.State = UILightState.Off;
|
uiLight3.State = value2 ? UILightState.On : UILightState.Off;
|
||||||
}
|
}
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"读取状态3失败: {ex.Message}");
|
Debug.WriteLine($"读取状态3失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool _lastRunStatus = false;
|
private bool _lastRunStatus = false;
|
||||||
@@ -307,12 +337,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers3 = await Task.Run(async () =>
|
bool[] registers3 = await _modbusMaster?.ReadCoilsAsync(1, 81, 1);
|
||||||
{
|
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 81, 1);
|
|
||||||
});
|
|
||||||
if (registers3 != null && registers3.Length >= 1)
|
if (registers3 != null && registers3.Length >= 1)
|
||||||
{
|
{
|
||||||
bool currentRunStatus = registers3[0];
|
bool currentRunStatus = registers3[0];
|
||||||
@@ -353,10 +379,15 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
|
_readtimer?.Stop();
|
||||||
Debug.WriteLine($"读取状态失败: {ex.Message}");
|
Debug.WriteLine($"读取状态失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
//finally { _asyncLock.Release(); }
|
//finally { _asyncLock.Release(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)
|
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)
|
||||||
{
|
{
|
||||||
if (_modbusMaster == null) return null;
|
if (_modbusMaster == null) return null;
|
||||||
@@ -932,7 +963,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
|
|
||||||
string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
string currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||||
|
|
||||||
// 跨线程更新UI(异步方法中仍需检查Invoke,避免跨线程异常)
|
if (uiLabel25.IsDisposed || !uiLabel25.IsHandleCreated)
|
||||||
|
return;
|
||||||
if (uiLabel29.InvokeRequired)
|
if (uiLabel29.InvokeRequired)
|
||||||
{
|
{
|
||||||
uiLabel29.Invoke(new Action(() =>
|
uiLabel29.Invoke(new Action(() =>
|
||||||
@@ -1076,6 +1108,7 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
private void uiButton1_Click(object sender, EventArgs e)
|
private void uiButton1_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
ma?.BtnClickFunctionForNew(Function.ButtonType.复归型, 80);//开始测试
|
ma?.BtnClickFunctionForNew(Function.ButtonType.复归型, 80);//开始测试
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void uiButton2_Click(object sender, EventArgs e)
|
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;
|
var modbusMaster = _modbusMaster;
|
||||||
if (modbusMaster == null) return;
|
if (modbusMaster == null) return;
|
||||||
|
|
||||||
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
|
ushort[] registers = modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length).Result;
|
||||||
.ConfigureAwait(false);
|
|
||||||
|
|
||||||
if (registers == null || registers.Length == 0)
|
if (registers == null || registers.Length == 0)
|
||||||
{
|
{
|
||||||
@@ -231,12 +231,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers1 = await Task.Run(async () =>
|
bool[] registers1 = await _modbusMaster?.ReadCoilsAsync(1, 10, 1);
|
||||||
{
|
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 10, 1);
|
|
||||||
});
|
|
||||||
if (registers1 != null && registers1.Length >= 1)
|
if (registers1 != null && registers1.Length >= 1)
|
||||||
{
|
{
|
||||||
bool value = registers1[0];
|
bool value = registers1[0];
|
||||||
@@ -268,12 +264,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers2 = await Task.Run(async () =>
|
bool[] registers2 = _modbusMaster?.ReadCoilsAsync(1, 51, 1).Result;
|
||||||
{
|
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 51, 1);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (registers2 != null && registers2.Length >= 1)
|
if (registers2 != null && registers2.Length >= 1)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -113,8 +113,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
var modbusMaster = _modbusMaster;
|
var modbusMaster = _modbusMaster;
|
||||||
if (modbusMaster == null) return;
|
if (modbusMaster == null) return;
|
||||||
|
|
||||||
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length)
|
ushort[] registers = await modbusMaster.ReadHoldingRegistersAsync(1, (ushort)address, (ushort)length);
|
||||||
.ConfigureAwait(false);
|
|
||||||
|
|
||||||
if (registers == null || registers.Length == 0)
|
if (registers == null || registers.Length == 0)
|
||||||
{
|
{
|
||||||
@@ -251,12 +251,8 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
bool[] registers2 = await Task.Run(async () =>
|
bool[] registers2 = await _modbusMaster?.ReadCoilsAsync(1, 301, 1);
|
||||||
{
|
|
||||||
if (_modbusMaster == null)
|
|
||||||
return null;
|
|
||||||
return await _modbusMaster?.ReadCoilsAsync(1, 301, 1);
|
|
||||||
});
|
|
||||||
if (registers2 != null && registers2.Length >= 1)
|
if (registers2 != null && registers2.Length >= 1)
|
||||||
{
|
{
|
||||||
bool currentRunStatus = registers2[0];
|
bool currentRunStatus = registers2[0];
|
||||||
@@ -298,9 +294,10 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
MessageBox.Show(ex.Message);
|
||||||
Debug.WriteLine($"读取状态失败: {ex.Message}");
|
Debug.WriteLine($"读取状态失败: {ex.Message}");
|
||||||
}
|
}
|
||||||
finally { _asyncLock.Release(); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)
|
public async Task<bool[]> ReadModbusCoilAsync(ushort registerAddress, ushort readCount)
|
||||||
|
|||||||
Reference in New Issue
Block a user