步骤下发更改

This commit is contained in:
2025-02-27 15:28:04 +08:00
parent b9bde07d6b
commit 9400b9e891
6 changed files with 319 additions and 33 deletions

View File

@@ -56,6 +56,7 @@ namespace CapMachine.Wpf.Models.ProModelPars
/// <summary>
/// 程序步骤集合
/// 在ProRuntimeService中已经初始实例化
/// </summary>
public List<ProStepExe> ListProStepExe { get; set; }
@@ -118,6 +119,12 @@ namespace CapMachine.Wpf.Models.ProModelPars
public DateTime StepEndDt { get; set; }
/// <summary>
/// 循环扫描每个参数的结束时间是否到达的线程是一个线程循环执行,逐个执行,理论上每个都不同步,有一点点时间差,就是执行步骤会延后一点点
/// 我们的打点斜坡数据是自己的定时器执行的,每个参数同步执行,而且是有一点点提前执行的,因为先打点执行循环后再计算结束时间
/// 以上的就会造成,当新步骤到来执行时,其实之前的步骤的斜率打点的步骤可能已经打点完毕了,那么是乐见这样的状态,防止了两个的时间冲突问题。
/// </summary>
private DateTime _CurrentDateTime;
/// <summary>
/// 当前时间
@@ -142,7 +149,7 @@ namespace CapMachine.Wpf.Models.ProModelPars
if (NextProStepExe == null)
{
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【Msg】没有下一步,当前仪表参数全部执行完毕 ");
$"【Msg】当前仪表参数全部执行完毕 ");
//为空时不执行后续的数据
RunEnable = false;
@@ -152,7 +159,7 @@ namespace CapMachine.Wpf.Models.ProModelPars
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【程序Seg】{CurProStepExe.ProSegName} " +
$"【程序步骤】{CurProStepExe.MeterStep} " +
$"【Msg】时间到,开始执行下一步步骤 ");
$"【Msg】新步骤开始执行-----------> ");
////////首先判断参数是否相同///////////
@@ -181,8 +188,10 @@ namespace CapMachine.Wpf.Models.ProModelPars
//存在坡度数据
var SecStepDur = NextProStepExe.EndSV - NextProStepExe.StartSV;
var SecStepValue = SecStepDur * 1.0 / NextProStepExe.KeepTime;
//先清除数据
ListSlopExStep.Clear();
//如果ListSlopExStep上还在执行打点任务的话,则如何处理
//先清除数据,并暂停
StopSlopExStep();
//组装斜坡数据,按照秒为间隔发送
for (var i = 1; i <= NextProStepExe.KeepTime; i++)
{
@@ -212,6 +221,12 @@ namespace CapMachine.Wpf.Models.ProModelPars
CurLoadPID = PidResult == true ? new PID() { P = (short)NextProStepExe.CurConfigPIDDto.P, I = (short)NextProStepExe.CurConfigPIDDto.I, D = (short)NextProStepExe.CurConfigPIDDto.D } : new PID(),
RunStepType = GetRunStepType(PidResult, LimitResult, true),
});
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【程序Seg】{CurProStepExe.ProSegName} " +
$"【程序步骤】{CurProStepExe.MeterStep} " +
$"【SV】{NextProStepExe.EndSV} " +
$"【保持时间】{NextProStepExe.KeepTime} 秒"
);
}
@@ -257,7 +272,7 @@ namespace CapMachine.Wpf.Models.ProModelPars
//设置下一步步骤运行时间
RunEnable = true;
}
else
{
@@ -313,10 +328,21 @@ namespace CapMachine.Wpf.Models.ProModelPars
/// </summary>
private void StartSlopExStep()
{
//用SlopExEnable控制存在一个可能就是设置后立刻执行那么第一个步骤第一秒时间会被压缩后面就正常了。最大是快一秒了第一秒提前打点这是可以接受的
//用SlopExEnable控制存在一个可能就是设置后立刻执行那么第一个步骤第一秒时间会被压缩后面就正常了。最大是快一秒了第一秒提前打点这是可以接受的
//结合步骤的扫描执行,形成时间差,就是新步骤到来时,斜率打点已经执行完毕,防止冲突,乐见这个状态
SlopExEnable = true;
}
/// <summary>
/// 停止执行打点任务的执行
/// </summary>
private void StopSlopExStep()
{
SlopExEnable = false;
//清空数据
ListSlopExStep.Clear();
}
/// <summary>
/// 斜率执行步骤集合
/// 打点集合
@@ -363,15 +389,22 @@ namespace CapMachine.Wpf.Models.ProModelPars
$"【斜坡打点值SV】{NoExData.First().SV} " +
$"【Msg】发送斜坡打点 ");
//执行一个循环打点后判断是否整个打点循环执行完毕
if (!ListSlopExStep.Where(a => a.IsHasEx == false).Any())
{
//执行完毕就标记状态
SlopExEnable = false;
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【程序Seg】{CurProStepExe.ProSegName} " +
$"【程序步骤】{CurProStepExe.MeterStep} " +
$"【Msg】斜坡打点执行完毕 ");
}
}
else
{
//执行完毕了,没有要执行的数据效率
SlopExEnable = false;
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【程序Seg】{CurProStepExe.ProSegName} " +
$"【程序步骤】{CurProStepExe.MeterStep} " +
$"【Msg】斜坡打点执行完毕 ");
return;
}
}
@@ -385,6 +418,23 @@ namespace CapMachine.Wpf.Models.ProModelPars
}
}
/// <summary>
/// 周期斜坡打点暂停执行
/// </summary>
public void PauseSlopExCyclePause()
{
SlopExEnable = false;
}
/// <summary>
/// 周期斜坡打点 继续运行
/// </summary>
public void ContinueSlopExCyclePause()
{
SlopExEnable = true;
}
/// <summary>
/// 周期定时器
/// </summary>