This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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(); }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user