This commit is contained in:
xyy
2026-05-12 15:57:45 +08:00
parent 91f01ecb89
commit 1608469812

View File

@@ -35,6 +35,8 @@ namespace 头罩视野.Views
bool isFinished;
//// 定时采集用
private DispatcherTimer testTimer;
private DispatcherTimer testTimerForLight;
// 保存上一条数据(用于去重)
private TestDataStore.TestRecord? _lastRecord;
@@ -66,6 +68,11 @@ namespace 头罩视野.Views
testTimer.Interval = TimeSpan.FromMilliseconds(500); // 500ms = 0.5秒
testTimer.Tick += Timer_Tick;
testTimerForLight = new DispatcherTimer();
testTimerForLight.Interval = TimeSpan.FromMilliseconds(1000); // 500ms = 0.5秒
testTimerForLight.Tick += testTimerForLight;
//// 判断连接
if (!ModbusHelper.IsConnected)
{
@@ -160,7 +167,7 @@ namespace 头罩视野.Views
//_rightFinalData = Enumerable.Repeat(0, 240).ToList();
// 面积也清空
isLeftOnly = btnLeft.Content.ToString() == "左眼关" && btnRight.Content.ToString() == "右眼开";
isRightOnly = btnLeft.Content.ToString() == "左眼开" && btnRight.Content.ToString() == "右眼关";
@@ -189,7 +196,7 @@ namespace 头罩视野.Views
//botViAnInt = botViAnInt <= 45 ? 52: botViAnInt;
botViAnInt = botViAnInt switch
{
<45 => 52,
< 45 => 52,
> 70 => 68,
_ => botViAnInt
};
@@ -199,8 +206,8 @@ namespace 头罩视野.Views
if (isLeftOnly)
{
//double binocularRateL = GetArea.CalcVisionRate(_leftTotalArea);
//sybhl.Text = binocularRateL.ToString("0"); // 视野保存率
//double binocularRateL = GetArea.CalcVisionRate(_leftTotalArea);
//sybhl.Text = binocularRateL.ToString("0"); // 视野保存率
//double blankArea = GetArea.GetBlankViewArea(_leftTotalArea);
//kbsyarea.Text = blankArea.ToString("0"); // 空白视野面积
@@ -213,16 +220,16 @@ namespace 头罩视野.Views
//double blankArea = GetArea.GetBlankViewArea(_rightTotalArea);
//kbsyarea.Text = blankArea.ToString("0"); // 空白视野面积
}
if (_leftFinalData != null && _leftFinalData.Count > 0 &&_rightFinalData != null && _rightFinalData.Count > 0)
if (_leftFinalData != null && _leftFinalData.Count > 0 && _rightFinalData != null && _rightFinalData.Count > 0)
{
// ✅ 传值调用:把左右眼最终数据传给方法
_binocularTotalArea = GetArea.CalculateBinocularArea( _leftFinalData,_rightFinalData, _lightPositions);
// 显示到界面
smsyarea.Text =_binocularTotalArea.ToString("0.00");
_binocularTotalArea = GetArea.CalculateBinocularArea(_leftFinalData, _rightFinalData, _lightPositions);
double zsyareaNumT= (_leftTotalArea + _rightTotalArea) - _binocularTotalArea;
// 显示到界面
smsyarea.Text = _binocularTotalArea.ToString("0.00");
double zsyareaNumT = (_leftTotalArea + _rightTotalArea) - _binocularTotalArea;
//double zsysaveSumT = GetArea.CalcVisionRate(zsyareaNumT) ;
zsyareaNum.Text = zsyareaNumT.ToString("0.0");//总视野面积
@@ -245,8 +252,8 @@ namespace 头罩视野.Views
double zongSmNum1 = (_binocularTotalArea / GlobalData.kbsmsyArea) * 100;
zongSmNum1 = zongSmNum1 >= 80 ? 65.5 : zongSmNum1;
sybhl.Text = zongSmNum1.ToString("0.00"); // 双目视野保存率
double zongNum1 = (zsyareaNumT / GlobalData.zsymjValue ) * 100;
zongNum1= zongNum1 >= 96 ? 80 : zongNum1;
double zongNum1 = (zsyareaNumT / GlobalData.zsymjValue) * 100;
zongNum1 = zongNum1 >= 96 ? 80 : zongNum1;
zsysaveSum.Text = zongNum1.ToString("0.00");//总视野保存率
}
}
@@ -327,8 +334,28 @@ namespace 头罩视野.Views
}
}
}
private async void testTimerForLightTick(object sender, EventArgs e)
{
if (_modbusMaster == null)
return;
ma.BtnClickFunction(Function.ButtonType., 1);
//计算
var ret = await _modbusMaster.ReadCoilsAsync(1, 1, 1);
if (ret != null && ret.Length > 0)
{
if (ret[0])
{
LedOn(led0);
LedOff(led1);
}
else
{
LedOn(led1);
LedOff(led0);
}
}
}
//计算
private async Task calCurrentangle()
{
await ReadLightBarData();
@@ -357,23 +384,23 @@ namespace 头罩视野.Views
_leftTotalArea += singleArea;
// 实时合并左眼:只要亮过一次,就永久亮
// 安全获取真实长度
int realLength = lightData.Length;
// 安全获取真实长度
int realLength = lightData.Length;
// 初始化最终数据(永远和 lightData 一样长,不会错)
if (_leftFinalData == null || _leftFinalData.Count != realLength)
{
_leftFinalData = new List<int>(new int[realLength]);
}
// 初始化最终数据(永远和 lightData 一样长,不会错)
if (_leftFinalData == null || _leftFinalData.Count != realLength)
{
_leftFinalData = new List<int>(new int[realLength]);
}
for (int i = 0; i < realLength; i++)
for (int i = 0; i < realLength; i++)
{
if (lightData[i] == 1)
{
if (lightData[i] == 1)
{
_leftFinalData[i] = 1;
}
_leftFinalData[i] = 1;
}
}
}
else if (isRightOnly)
@@ -433,8 +460,8 @@ namespace 头罩视野.Views
data.RightEyeArea == _lastRecord.RightEyeArea &&
data.BinocularArea == _lastRecord.BinocularArea &&
data.LowerVision == _lastRecord.LowerVision &&
data.VisionRetentionRate == _lastRecord.VisionRetentionRate &&
data.totalVisionArea == _lastRecord.totalVisionArea&&
data.VisionRetentionRate == _lastRecord.VisionRetentionRate &&
data.totalVisionArea == _lastRecord.totalVisionArea &&
data.GetVisionRetentionRate == _lastRecord.GetVisionRetentionRate
)
{
@@ -532,13 +559,13 @@ namespace 头罩视野.Views
isFinished = false;
}
if (double.TryParse(fbspeed.Text, out double result))
{
GlobalData.JudgmentalPerspective = result.ToString();
GlobalData.JudgmentalPerspective = result.ToString();
}
await Task.WhenAll(tasks);
}
catch (Exception ex)
@@ -624,7 +651,7 @@ namespace 头罩视野.Views
ma.BtnClickFunction(Function.ButtonType., 103);
}
// 蓝色亮(蓝色)
private void LedOn(Ellipse led)
@@ -771,7 +798,7 @@ namespace 头罩视野.Views
private void Page_Loaded(object sender, RoutedEventArgs e)
{
_timer.Start();
ma = new Function(_modbusMaster);
c = new DataChange();