This commit is contained in:
wxt
2026-01-14 09:40:00 +08:00
parent b19a387b07
commit bd9be5a7bc
3 changed files with 101 additions and 19 deletions

View File

@@ -859,7 +859,7 @@
uiLabel25.ForeColor = Color.FromArgb(64, 158, 255); uiLabel25.ForeColor = Color.FromArgb(64, 158, 255);
uiLabel25.Location = new Point(750, 220); uiLabel25.Location = new Point(750, 220);
uiLabel25.Name = "uiLabel25"; uiLabel25.Name = "uiLabel25";
uiLabel25.Size = new Size(60, 34); uiLabel25.Size = new Size(80, 34);
uiLabel25.Style = Sunny.UI.UIStyle.Custom; uiLabel25.Style = Sunny.UI.UIStyle.Custom;
uiLabel25.StyleCustomMode = true; uiLabel25.StyleCustomMode = true;
uiLabel25.TabIndex = 21; uiLabel25.TabIndex = 21;
@@ -885,7 +885,7 @@
uiLabel2.ForeColor = Color.FromArgb(64, 158, 255); uiLabel2.ForeColor = Color.FromArgb(64, 158, 255);
uiLabel2.Location = new Point(750, 148); uiLabel2.Location = new Point(750, 148);
uiLabel2.Name = "uiLabel2"; uiLabel2.Name = "uiLabel2";
uiLabel2.Size = new Size(60, 34); uiLabel2.Size = new Size(80, 34);
uiLabel2.Style = Sunny.UI.UIStyle.Custom; uiLabel2.Style = Sunny.UI.UIStyle.Custom;
uiLabel2.StyleCustomMode = true; uiLabel2.StyleCustomMode = true;
uiLabel2.TabIndex = 19; uiLabel2.TabIndex = 19;
@@ -1052,7 +1052,7 @@
uiLabel12.ForeColor = Color.FromArgb(64, 158, 255); uiLabel12.ForeColor = Color.FromArgb(64, 158, 255);
uiLabel12.Location = new Point(460, 218); uiLabel12.Location = new Point(460, 218);
uiLabel12.Name = "uiLabel12"; uiLabel12.Name = "uiLabel12";
uiLabel12.Size = new Size(60, 34); uiLabel12.Size = new Size(75, 34);
uiLabel12.Style = Sunny.UI.UIStyle.Custom; uiLabel12.Style = Sunny.UI.UIStyle.Custom;
uiLabel12.StyleCustomMode = true; uiLabel12.StyleCustomMode = true;
uiLabel12.TabIndex = 9; uiLabel12.TabIndex = 9;
@@ -1129,13 +1129,12 @@
uiLabel8.ForeColor = Color.FromArgb(64, 158, 255); uiLabel8.ForeColor = Color.FromArgb(64, 158, 255);
uiLabel8.Location = new Point(460, 146); uiLabel8.Location = new Point(460, 146);
uiLabel8.Name = "uiLabel8"; uiLabel8.Name = "uiLabel8";
uiLabel8.Size = new Size(60, 34); uiLabel8.Size = new Size(75, 34);
uiLabel8.Style = Sunny.UI.UIStyle.Custom; uiLabel8.Style = Sunny.UI.UIStyle.Custom;
uiLabel8.StyleCustomMode = true; uiLabel8.StyleCustomMode = true;
uiLabel8.TabIndex = 3; uiLabel8.TabIndex = 3;
uiLabel8.Text = "0.0"; uiLabel8.Text = "0.0";
uiLabel8.TextAlign = ContentAlignment.MiddleLeft; uiLabel8.TextAlign = ContentAlignment.MiddleLeft;
// //
// uiLabel9 // uiLabel9
// //
@@ -1156,7 +1155,7 @@
uiLabel7.ForeColor = Color.FromArgb(64, 158, 255); uiLabel7.ForeColor = Color.FromArgb(64, 158, 255);
uiLabel7.Location = new Point(460, 76); uiLabel7.Location = new Point(460, 76);
uiLabel7.Name = "uiLabel7"; uiLabel7.Name = "uiLabel7";
uiLabel7.Size = new Size(60, 34); uiLabel7.Size = new Size(75, 34);
uiLabel7.Style = Sunny.UI.UIStyle.Custom; uiLabel7.Style = Sunny.UI.UIStyle.Custom;
uiLabel7.StyleCustomMode = true; uiLabel7.StyleCustomMode = true;
uiLabel7.TabIndex = 1; uiLabel7.TabIndex = 1;

View File

@@ -333,6 +333,59 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
private bool _lastRunStatus = false; private bool _lastRunStatus = false;
private bool _isReported = false; private bool _isReported = false;
//private async Task ReadStartStatusAsync()
//{
// try
// {
// bool[] registers3 = await _modbusMaster?.ReadCoilsAsync(1, 81, 1);
// if (registers3 != null && registers3.Length >= 1)
// {
// bool currentRunStatus = registers3[0];
// this.Invoke(new Action(() =>
// {
// uiLabel31.Text = currentRunStatus ? "运行中" : "空闲中";
// }));
// // ========== 关键修改1移除重复的插入逻辑只保留一段 ==========
// // 仅在「运行→停止」且未上报过的情况下执行一次插入
// if (_lastRunStatus && !currentRunStatus && !_isReported)
// {
// // 添加延迟确保数据稳定
// //await Task.Delay(500);
// //await Task.Delay(500);
// //加锁防止异步并发重复执行
// await _asyncLock.WaitAsync();
// try
// {
// // 二次校验,防止锁等待期间状态已变更
// if (!_isReported)
// {
// var model = await InsertReportAsync();
// if (model != null && !string.IsNullOrEmpty(model.Id2))
// {
// conductivityRepository.InsertReportItems(model);
// _isReported = true; // 标记已上报
// Debug.WriteLine($"报表插入成功:样品{model.sampleType2}, 分类{model.result2}");
// }
// }
// }
// finally
// {
// _asyncLock.Release(); // 释放锁
// }
// }
// _lastRunStatus = currentRunStatus;
// }
// }
// catch (Exception ex)
// {
// MessageBox.Show(ex.Message);
// _readtimer?.Stop();
// Debug.WriteLine($"读取状态失败: {ex.Message}");
// }
// //finally { _asyncLock.Release(); }
//}
private async Task ReadStartStatusAsync() private async Task ReadStartStatusAsync()
{ {
try try
@@ -342,24 +395,28 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
if (registers3 != null && registers3.Length >= 1) if (registers3 != null && registers3.Length >= 1)
{ {
bool currentRunStatus = registers3[0]; bool currentRunStatus = registers3[0];
this.Invoke(new Action(() => this.Invoke(new Action(() =>
{ {
uiLabel31.Text = currentRunStatus ? "运行中" : "空闲中"; uiLabel31.Text = currentRunStatus ? "运行中" : "空闲中";
})); }));
// ========== 关键修改1移除重复的插入逻辑只保留一段 ==========
// 仅在「运行→停止」且未上报过的情况下执行一次插入 // ========== 关键修改:修复状态机逻辑 ==========
if (_lastRunStatus && !currentRunStatus && !_isReported) // 检测到「运行→停止」的下降沿
if (_lastRunStatus && !currentRunStatus)
{ {
// 添加延迟确保数据稳定 Debug.WriteLine($"检测到运行停止:上次状态={_lastRunStatus},当前状态={currentRunStatus},已上报={_isReported}");
//await Task.Delay(500);
//await Task.Delay(500); // 延迟等待数据稳定
//加锁防止异步并发重复执行 await Task.Delay(300);
await _asyncLock.WaitAsync();
await _asyncLock.WaitAsync();
try try
{ {
// 二次校验,防止锁等待期间状态已变更 // 只有在没有上报过时才执行插入
if (!_isReported) if (!_isReported)
{ {
Debug.WriteLine("开始执行InsertReportAsync...");
var model = await InsertReportAsync(); var model = await InsertReportAsync();
if (model != null && !string.IsNullOrEmpty(model.Id2)) if (model != null && !string.IsNullOrEmpty(model.Id2))
{ {
@@ -367,13 +424,28 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
_isReported = true; // 标记已上报 _isReported = true; // 标记已上报
Debug.WriteLine($"报表插入成功:样品{model.sampleType2}, 分类{model.result2}"); Debug.WriteLine($"报表插入成功:样品{model.sampleType2}, 分类{model.result2}");
} }
else
{
Debug.WriteLine("InsertReportAsync返回空模型或无效ID");
}
}
else
{
Debug.WriteLine("已上报过,跳过插入");
} }
} }
finally finally
{ {
_asyncLock.Release(); // 释放锁 _asyncLock.Release();
} }
} }
// 检测到「停止→运行」的上升沿,重置上报标记
else if (!_lastRunStatus && currentRunStatus)
{
_isReported = false;
_isCurrentRecordAdded = false;
Debug.WriteLine("检测到开始运行,重置上报标记");
}
_lastRunStatus = currentRunStatus; _lastRunStatus = currentRunStatus;
} }
@@ -384,7 +456,6 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
_readtimer?.Stop(); _readtimer?.Stop();
Debug.WriteLine($"读取状态失败: {ex.Message}"); Debug.WriteLine($"读取状态失败: {ex.Message}");
} }
//finally { _asyncLock.Release(); }
} }

View File

@@ -1239,10 +1239,22 @@ namespace 外科辅料和患者防护罩激光抗性测试仪
} }
} }
private void uiButton8_Click(object sender, EventArgs e) private void uiButton8_Click(object sender, EventArgs e)
{ {
AutoCameraForm cameraForm = new AutoCameraForm(() => RunStatus); //AutoCameraForm cameraForm = new AutoCameraForm(() => RunStatus);
this.SwitchToForm(() => cameraForm); //this.SwitchToForm(() => cameraForm);
var cameraForm = new AutoCameraForm(() => RunStatus);
// 设置窗体关闭时释放资源
cameraForm.FormClosed += (s, args) =>
{
cameraForm.Dispose();
};
cameraForm.Show();
} }
private void uiButton11_Click(object sender, EventArgs e) private void uiButton11_Click(object sender, EventArgs e)