补全其他参数的下载参数

运行 停止  暂停的防呆操作
This commit is contained in:
2025-03-01 11:26:35 +08:00
parent a2c69f24f2
commit 1caa2fdd9f
16 changed files with 3318 additions and 260 deletions

View File

@@ -20,7 +20,32 @@ namespace CapMachine.Wpf.Models
/// <summary>
/// 地址
/// </summary>
public string? Address { get; set; }
public string? SvAddress { get; set; }
/// <summary>
/// 地址信息 Pid_P
/// </summary>
public string? Pid_PAddress { get; set; }
/// <summary>
/// 地址信息 Pid_I
/// </summary>
public string? Pid_IAddress { get; set; }
/// <summary>
/// 地址信息 Pid_D
/// </summary>
public string? Pid_DAddress { get; set; }
/// <summary>
/// 地址信息 Limit_Up
/// </summary>
public string? Limit_UpAddress { get; set; }
/// <summary>
/// 地址信息 Limit_Down
/// </summary>
public string? Limit_DownAddress { get; set; }
/// <summary>
/// 精度 1,10,100,1000

View File

@@ -1,4 +1,5 @@
using CapMachine.Wpf.ChannelModel;
using AngleSharp.Dom.Events;
using CapMachine.Wpf.ChannelModel;
using CapMachine.Wpf.Services;
using ImTools;
using Masuit.Tools;
@@ -34,8 +35,13 @@ namespace CapMachine.Wpf.Models.ProModelPars
CycleTimer.AutoReset = true;
CycleTimer.Enabled = true;
CycleTimer.Start();
}
/// <summary>
/// 是否是速度仪表参数
/// </summary>
public bool IsSpeed { get; set; }=false;
/// <summary>
/// 程序执行管道
@@ -96,7 +102,11 @@ namespace CapMachine.Wpf.Models.ProModelPars
#region
public EventHandler<string> RunTimeCallSglEvent;
/// <summary>
/// 速度运行结束事件
/// </summary>
public event EventHandler<string> SpeedRunEndEvent;
/// <summary>
/// 是否启用
@@ -145,12 +155,17 @@ namespace CapMachine.Wpf.Models.ProModelPars
//RunEnable = false;
//时间到了触发下载下一步步骤
//不为空的数据
if (NextProStepExe == null)
{
Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " +
$"【Msg】当前仪表参数全部执行完毕 ");
//速度执行结束发布事件
if (IsSpeed) SpeedRunEndEvent.Invoke(this, "OK");
//为空时不执行后续的数据
RunEnable = false;
return;
@@ -185,6 +200,18 @@ namespace CapMachine.Wpf.Models.ProModelPars
////////发送步骤信息///////////
if (NextProStepExe.ExistSlop)
{
//存在斜坡数据SV是通过集合陆续打点写入但是PID和Limit需要判断是否要写入只要写一次即可
ProRunChannel.Writer.WriteAsync(new ProRunChannelData()
{
MeterName = MeterName,
SV = NextProStepExe.EndSV,
ProSegName = NextProStepExe.ProSegName,
MeterStep = NextProStepExe.MeterStep,
CurLoadLimit = LimitResult == true ? new Limit() { Up = (short)NextProStepExe.CurConfigLimitDto.Up, Down = (short)NextProStepExe.CurConfigLimitDto.Down } : new Limit(),
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, false),
});
//存在坡度数据
var SecStepDur = NextProStepExe.EndSV - NextProStepExe.StartSV;
var SecStepValue = SecStepDur * 1.0 / NextProStepExe.KeepTime;
@@ -256,7 +283,7 @@ namespace CapMachine.Wpf.Models.ProModelPars
if (ListProStepExe.Where(x => x.MeterStep == CurProStepExe.MeterStep + 1).Any())
{
//存在下一步数据
NextProStepExe = ListProStepExe.FirstOrDefault(x => x.MeterStep == CurProStepExe.MeterStep + 1);
NextProStepExe = ListProStepExe.FirstOrDefault(x => x.MeterStep == CurProStepExe.MeterStep + 1)!;
}
else
{
@@ -312,6 +339,18 @@ namespace CapMachine.Wpf.Models.ProModelPars
{
return RunStepType.StepSV;
}
else if (pid && limit)
{
return RunStepType.LimitPid;
}
else if (limit)
{
return RunStepType.Limit;
}
else if (pid)
{
return RunStepType.Pid;
}
else
{
return RunStepType.Step;

View File

@@ -35,6 +35,24 @@ namespace CapMachine.Wpf.Models.ProModelPars
/// </summary>
StepSV = 4,
/// <summary>
/// 正常的步骤信息-Limit 下载数据
/// 就是包括SV PID和SLIMIT的数据当然SV PID和SLIMIT跟上次是一样的话则不需要下载
/// </summary>
LimitPid = 5,
/// <summary>
/// 正常的步骤信息-Limit 下载数据
/// 就是包括SV PID和SLIMIT的数据当然SV PID和SLIMIT跟上次是一样的话则不需要下载
/// </summary>
Limit = 6,
/// <summary>
/// 正常的步骤信息-PID 下载数据
/// 就是包括SV PID和SLIMIT的数据当然SV PID和SLIMIT跟上次是一样的话则不需要下载
/// </summary>
Pid = 7,
/// <summary>
/// 斜率单元
/// 带斜率的数据打点执行只传送SV值

View File

@@ -0,0 +1,144 @@
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows;
using System.Windows.Threading;
namespace CapMachine.Wpf.Models
{
/// <summary>
/// 程序运行时间统计
/// </summary>
public class ProRunTimeCalc : BindableBase
{
public ProRunTimeCalc()
{
//秒触发一次
CycleTimer = new System.Timers.Timer(1000);
CycleTimer.Elapsed += ProRunCycleAction;
CycleTimer.AutoReset = true;
CycleTimer.Enabled = true;
}
/// <summary>
/// 程序运行时间周期统计
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void ProRunCycleAction(object? sender, ElapsedEventArgs e)
{
Application.Current.Dispatcher.BeginInvoke(new Action(() =>
{
CalcTime();
}));
//CycleTimer.Stop();
//CycleTimer.Start();
}
/// <summary>
/// 统计时间
/// </summary>
private void CalcTime()
{
ProEndDt = DateTime.Now;
ProRunTimeStr = ConvertSecToDHMS((int)((ProEndDt - ProStartDt).TotalSeconds - PauseTotalSecTime));
}
private string ConvertSecToDHMS(int totalSeconds)
{
// 驗證非負(可根據需求調整)
if (totalSeconds < 0)
return "00:00:00:00";
int days = totalSeconds / 86400; // 1天 = 86400秒
int remainingSeconds = totalSeconds % 86400;
int hours = remainingSeconds / 3600; // 1小時 = 3600秒
remainingSeconds %= 3600;
int minutes = remainingSeconds / 60; // 1分鐘 = 60秒
int seconds = remainingSeconds % 60;
// 格式化輸出,確保時、分、秒為兩位數
return $"{days}天:{hours:D2}时:{minutes:D2}分:{seconds:D2}秒";
}
/// <summary>
/// 开始计时
/// </summary>
public void StartProRunTime()
{
ProStartDt = DateTime.Now;
CycleTimer.Start();
}
/// <summary>
/// 暂停计时
/// </summary>
public void PauseProRunTime()
{
CycleTimer.Stop();
}
/// <summary>
/// 继续计时
/// </summary>
public void ContinueProRunTime()
{
CycleTimer.Start();
}
/// <summary>
/// 结束计时
/// </summary>
public void EndProRunTime()
{
CycleTimer.Stop();
CalcTime();
}
/// <summary>
/// 周期定时器
/// </summary>
private System.Timers.Timer CycleTimer { get; set; }
/// <summary>
/// 程序开始的时间
/// </summary>
public DateTime ProStartDt { get; set; }
/// <summary>
/// 程序结束的时间
/// </summary>
public DateTime ProEndDt { get; set; }
private string? _ProRunTimeStr;
/// <summary>
/// 程序运行时间字符串
/// </summary>
public string? ProRunTimeStr
{
get { return _ProRunTimeStr; }
set { _ProRunTimeStr = value; RaisePropertyChanged(); }
}
/// <summary>
/// 全部的暂停的时间
/// 可能暂停多次
/// </summary>
public int PauseTotalSecTime { get; set; }
}
}

View File

@@ -71,6 +71,7 @@ namespace CapMachine.Wpf.Models
/// </summary>
private void InitConfig()
{
//未配置触发器 CanFire 返回值 false
//状态机初始化
StateMachine = new StateMachine<RunState, RunStateTrig>(RunState.Wait);
@@ -80,54 +81,82 @@ namespace CapMachine.Wpf.Models
.PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid())
.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
//.Permit(RunStateTrig.StartTrig, RunState.Run)
//.Permit(RunStateTrig.ResetTrig, RunState.Wait)
.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
.Ignore(RunStateTrig.ResetTrig)
.Ignore(RunStateTrig.WaitTrig);
.PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid());
//.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
//.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
//.Ignore(RunStateTrig.ResetTrig);
//.Ignore(RunStateTrig.ContinueTrig)
//.Ignore(RunStateTrig.WaitTrig);
StateMachine.Configure(RunState.Alarm)
.OnEntry(t => AlarmEntryCall())
.OnExit(t => AlarmExitCall())
.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
.Ignore(RunStateTrig.AlarmTrig);
.PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid());
//.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
//.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
//.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
//.Ignore(RunStateTrig.ContinueTrig)
//.Ignore(RunStateTrig.AlarmTrig);
StateMachine.Configure(RunState.Run)
.OnEntry(t => RunEntryCall())
.OnExit(t => RunExitCall())
.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid())
//.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid())
.PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid())
.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
.Ignore(RunStateTrig.StartTrig);
.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid());
//.PermitIf(RunStateTrig.ContinueTrig, RunState.Stop, () => false)
//.Ignore(RunStateTrig.ContinueTrig)
//.Ignore(RunStateTrig.StartTrig);
StateMachine.Configure(RunState.Stop)
.OnEntry(t => StopEntryCall())
.OnExit(t => StopExitCall())
.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid())
.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
.Ignore(RunStateTrig.EndTrig);
.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid());
//.PermitIf(RunStateTrig.PauseTrig, RunState.Pause, () => PausePreValid())
//.Ignore(RunStateTrig.ContinueTrig)
//.Ignore(RunStateTrig.PauseTrig)
//.Ignore(RunStateTrig.EndTrig);
StateMachine.Configure(RunState.Pause)
.OnEntry(t => PauseEntryCall())
.OnExit(t => PauseExitCall())
.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Wait, () => WaitPreValid())
.Permit(RunStateTrig.ContinueTrig, RunState.Run)
//.PermitIf(RunStateTrig.WaitTrig, RunState.Wait, () => WaitPreValid())
.PermitIf(RunStateTrig.ResetTrig, RunState.Stop, () => StopPreValid())
.PermitIf(RunStateTrig.AlarmTrig, RunState.Alarm, () => AlarmPreValid())
.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
.PermitIf(RunStateTrig.EndTrig, RunState.Stop, () => StopPreValid())
.Ignore(RunStateTrig.PauseTrig);
//.PermitIf(RunStateTrig.StartTrig, RunState.Run, () => RunPreValid())
.Permit(RunStateTrig.EndTrig, RunState.Stop);
//.Ignore(RunStateTrig.PauseTrig);
}
private bool _BtnStartState;
/// <summary>
/// 界面的开始按钮状态
/// </summary>
public bool BtnStartState
{
get { return _BtnStartState; }
set { _BtnStartState = value; RaisePropertyChanged(); }
}
private bool _BtnEndState;
/// <summary>
/// 界面的结束按钮状态
/// </summary>
public bool BtnEndState
{
get { return _BtnEndState; }
set { _BtnEndState = value; RaisePropertyChanged(); }
}
#region
/// <summary>
@@ -144,7 +173,7 @@ namespace CapMachine.Wpf.Models
}
else
{
MessageBox.Show($"WaitTrig-没有满足条件");
MessageBox.Show($"WaitTrig-没有满足Wait条件");
return false;
}
}
@@ -155,17 +184,19 @@ namespace CapMachine.Wpf.Models
/// <returns></returns>
public bool FireAlarm()
{
var Result = StateMachine.CanFire(RunStateTrig.AlarmTrig);
if (Result)
{
StateMachine.Fire(RunStateTrig.AlarmTrig);
return true;
}
else
{
MessageBox.Show($"AlarmTrig-没有满足条件");
return false;
}
StateMachine.Fire(RunStateTrig.AlarmTrig);
return true;
//var Result = StateMachine.CanFire(RunStateTrig.AlarmTrig);
//if (Result)
//{
// StateMachine.Fire(RunStateTrig.AlarmTrig);
// return true;
//}
//else
//{
// MessageBox.Show($"AlarmTrig-没有满足条件");
// return false;
//}
}
/// <summary>
@@ -182,7 +213,7 @@ namespace CapMachine.Wpf.Models
}
else
{
MessageBox.Show($"ResetTrig-没有满足条件");
MessageBox.Show($"ResetTrig-没有满足Reset条件");
return false;
}
}
@@ -201,7 +232,7 @@ namespace CapMachine.Wpf.Models
}
else
{
MessageBox.Show($"StartTrig-没有满足条件");
MessageBox.Show($"StartTrig-没有满足Start条件");
return false;
}
}
@@ -220,7 +251,7 @@ namespace CapMachine.Wpf.Models
}
else
{
MessageBox.Show($"EndTrig-没有满足条件");
MessageBox.Show($"EndTrig-没有满足End条件");
return false;
}
}
@@ -239,12 +270,29 @@ namespace CapMachine.Wpf.Models
}
else
{
MessageBox.Show($"PauseTrig-没有满足条件");
MessageBox.Show($"PauseTrig-没有满足Pause条件");
return false;
}
}
/// <summary>
/// 进入 Continue 状态
/// </summary>
/// <returns></returns>
public bool FireContinue()
{
var Result = StateMachine.CanFire(RunStateTrig.ContinueTrig);
if (Result)
{
StateMachine.Fire(RunStateTrig.ContinueTrig);
return true;
}
else
{
MessageBox.Show($"ContinueTrig-没有满足Continue条件");
return false;
}
}
@@ -293,12 +341,13 @@ namespace CapMachine.Wpf.Models
/// <exception cref="NotImplementedException"></exception>
private bool StopPreValid()
{
//运行切换到停止
if (StateMachine.State == RunState.Run)
{
return true;
}
return false;
return true;
////运行切换到停止
//if (StateMachine.State == RunState.Run)
//{
// return true;
//}
//return false;
}
/// <summary>
@@ -334,6 +383,7 @@ namespace CapMachine.Wpf.Models
private void StopExitCall()
{
BtnEndState = false;
Console.WriteLine($"{Name}-StopExitCall");
}
@@ -342,6 +392,7 @@ namespace CapMachine.Wpf.Models
/// </summary>
private void StopEntryCall()
{
BtnEndState = true;
RunStateMsg = "停止";
Console.WriteLine($"{Name}-StopEntryCall");
@@ -350,6 +401,7 @@ namespace CapMachine.Wpf.Models
private void RunExitCall()
{
BtnStartState = false;
//退出运行状态
IsRunState = false;
Console.WriteLine($"{Name}-RunExitCall");
@@ -360,6 +412,7 @@ namespace CapMachine.Wpf.Models
/// </summary>
private void RunEntryCall()
{
BtnStartState = true;
RunStateMsg = "运行";
Console.WriteLine($"{Name}-RunEntryCall");
//进入运行状态

View File

@@ -40,6 +40,12 @@ namespace CapMachine.Wpf.Models
/// 复位 触发
/// </summary>
ResetTrig = 6,
/// <summary>
/// 继续 触发
/// </summary>
ContinueTrig = 7,
}
/// <summary>

View File

@@ -117,5 +117,10 @@ namespace CapMachine.Wpf.Models.Tag
/// </summary>
bool IsMeter { get; set; }
string AutoHandSwitchAddress { get; set; }
string Pid_PAddress { get; set; }
string Pid_IAddress { get; set; }
string Pid_DAddress { get; set; }
string Limit_UpAddress { get; set; }
string Limit_DownAddress { get; set; }
}
}

View File

@@ -122,6 +122,31 @@ namespace CapMachine.Wpf.Models.Tag
/// </summary>
public string MVAddress { get; set; }
/// <summary>
/// 地址信息 Pid_P
/// </summary>
public string Pid_PAddress { get; set; }
/// <summary>
/// 地址信息 Pid_I
/// </summary>
public string Pid_IAddress { get; set; }
/// <summary>
/// 地址信息 Pid_D
/// </summary>
public string Pid_DAddress { get; set; }
/// <summary>
/// 地址信息 Limit_Up
/// </summary>
public string Limit_UpAddress { get; set; }
/// <summary>
/// 地址信息 Limit_Down
/// </summary>
public string Limit_DownAddress { get; set; }
/// <summary>
/// 地址信息 Index
/// </summary>

View File

@@ -0,0 +1,14 @@
using Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CapMachine.Wpf.PrismEvent
{
public class ProRunEvent : PubSubEvent<ProRunEventMsg>
{
}
}

View File

@@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CapMachine.Wpf.PrismEvent
{
/// <summary>
/// 程序运行事件消息
/// </summary>
public class ProRunEventMsg
{
/// <summary>
/// 机器
/// </summary>
public string? Machine { get; set; }
/// <summary>
/// 消息
/// </summary>
public string? Msg { get; set; }
}
}

View File

@@ -96,6 +96,11 @@ namespace CapMachine.Wpf.Services
///// </summary>
//public List<TagInfo> ListRtDataModel { get; set; }
/// <summary>
/// PLC加载配置数据集合
/// </summary>
public List<PlcLoadConfigCell> ListPlcLoadConfigCell { get; set; }
/// <summary>
/// 标签管理中心
/// </summary>
@@ -151,39 +156,39 @@ namespace CapMachine.Wpf.Services
#region
////三电 Sample
TagManger.AddTag(new Tag<short>("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, });
TagManger.AddTag(new Tag<short>("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("转速", "转速[rpm]", "Speed", "程序", "VW15000", 100, 0, 1, "rpm", new ShortTagValue(), true) { DecimalPoint = 0, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("排气压力", "排气压力[BarA]", "ExPress", "程序", "VW15002", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("吸气压力", "吸气压力[BarA]", "InhPress", "程序", "VW15004", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("吸气温度", "吸气温度[℃]", "InhTemp", "程序", "VW15006", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("COND1温度", "COND1温度[℃]", "Cond1Temp", "程序", "VW15008", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("润滑油压力", "润滑油压力[BarA]", "LubePress", "程序", "VW15010", 100, 0, 100, "BarA", new ShortTagValue(), true) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("COND2压力", "COND2压力[BarA]", "Cond2Press", "程序", "VW15012", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("OCR", "OCR[%]", "OCR", "程序", "VW15014", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("HV[V]", "HV[V]", "HV", "程序", "VW15016", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("HV[A]", "HV[A]", "HVCur", "程序", "VW15018", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("HV[W]", "HV[W]", "HVPw", "程序", "VW15020", 100, 0, 1, "W", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("LV[V]", "LV[V]", "LV", "程序", "VW15022", 100, 0, 10, "V", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
//TagManger.AddTag(new Tag<short>("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 1, "A", new ShortTagValue(), false) { DecimalPoint = 1 });
TagManger.AddTag(new Tag<short>("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("LV[A]", "LV[A]", "LVCur", "程序", "VW15024", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("环境温度", "环境温度[℃]", "EnvTemp", "程序", "VW15026", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
//TagManger.AddTag(new Tag<short>("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1 });
TagManger.AddTag(new Tag<short>("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("环境湿度", "环境湿度[%]", "EnvRH", "程序", "VW15028", 100, 0, 10, "%", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("OS1温度", "OS1温度[℃]", "OS1Temp", "程序", "VW15030", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("OS2温度", "OS2温度[℃]", "OS2Temp", "程序", "VW15032", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("COND2温度", "COND2温度[℃]", "Cond2Temp", "程序", "VW15034", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("EVAP出口温度", "EVAP出口温度[℃]", "EVAPExpTemp", "程序", "VW15036", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
//TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1 });
TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true });
TagManger.AddTag(new Tag<short>("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true });
TagManger.AddTag(new Tag<short>("冷媒流量", "冷媒流量[L/min]", "VRV", "程序", "VW15038", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("润滑油流量", "润滑油流量[L/min]", "LubeFlow", "程序", "VW15040", 100, 0, 10, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("排气温度", "排气温度[℃]", "ExTemp", "程序", "VW15042", 100, 0, 10, "℃", new ShortTagValue(), true) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("膨胀阀前压力", "膨胀阀前压力[BarA]", "TxvFrPress", "程序", "VW15044", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("膨胀阀前温度", "膨胀阀前温度[℃]", "TxvFrTemp", "程序", "VW15046", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("EVAP出口压力", "EVAP出口压力[BarA]", "EVAPExpPress", "程序", "VW15048", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("腔内压力", "腔内压力[BarA]", "IntrplPress", "程序", "VW15050", 100, 0, 100, "BarA", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("压缩机表面温度", "压缩机表面温度[℃]", "CapSurfTemp", "程序", "VW15052", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("PTC流量", "PTC流量[L/min]", "PTCFlow", "程序", "VW15054", 100, 0, 1, "L/min", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("PTC入水温度", "PTC入水温度[℃]", "PTCEntTemp", "程序", "VW15056", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("PTC出水温度", "PTC出水温度[℃]", "PTCExpTemp", "程序", "VW15058", 100, 0, 10, "℃", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = true, SVAddress = "VW5", Pid_PAddress = "VW0", Pid_IAddress = "VW1", Pid_DAddress = "VW2", Limit_UpAddress = "VW3", Limit_DownAddress = "VW4" });
TagManger.AddTag(new Tag<short>("通讯Cmp母线电流", "通讯Cmp母线电流[A]", "ComCapBusCur", "程序", "VW15060", 100, 0, 100, "A", new ShortTagValue(), false) { DecimalPoint = 2, IsMeter = false });
TagManger.AddTag(new Tag<short>("通讯Cmp母线电压", "通讯Cmp母线电压[V]", "ComCapBusVol", "程序", "VW15062", 100, 0, 10, "V", new ShortTagValue(), false) { DecimalPoint = 1, IsMeter = false });
TagManger.AddTag(new Tag<short>("通讯Cmp逆变器温度", "通讯Cmp逆变器温度[℃]", "ComCapInvTemp", "程序", "VW15064", 100, 0, 1, "℃", new ShortTagValue(), false) { DecimalPoint = 0, IsMeter = false });
@@ -1024,6 +1029,18 @@ namespace CapMachine.Wpf.Services
return false;
}
/// <summary>
/// 程序继续
/// 取反
/// </summary>
/// <returns></returns>
public bool SysContinue()
{
return true;
}
#endregion
@@ -1140,7 +1157,7 @@ namespace CapMachine.Wpf.Services
while (ThreadEnable)
{
//await Task.CompletedTask;
DiagnosticsTime.Reset();
@@ -1589,6 +1606,115 @@ namespace CapMachine.Wpf.Services
{
////第一次计时
//stopwatch.Start(); //启动Stopwatch
switch (ProRunChannelData.RunStepType)
{
case RunStepType.Step:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Sv
var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!);
if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败");
//Pid
var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P);
if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败");
var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I);
if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败");
var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D);
if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败");
//Limit
var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up);
if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败");
var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down);
if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败");
}
break;
case RunStepType.StepPID:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Sv
var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!);
if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败");
//Pid
var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P);
if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败");
var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I);
if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败");
var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D);
if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败");
}
break;
case RunStepType.StepLimit:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Sv
var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!);
if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败");
//Limit
var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up);
if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败");
var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down);
if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败");
}
break;
case RunStepType.StepSV:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Sv
var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!);
if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败");
}
break;
case RunStepType.LimitPid:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Pid
var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P);
if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败");
var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I);
if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败");
var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D);
if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败");
//Limit
var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up);
if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败");
var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down);
if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败");
}
break;
case RunStepType.Pid:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Pid
var Pid_PResult = SiemensDrive.Write(CurMeterInfo.Pid_PAddress, (short)ProRunChannelData.CurLoadPID!.P);
if (!Pid_PResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-P写入失败");
var Pid_IResult = SiemensDrive.Write(CurMeterInfo.Pid_IAddress, (short)ProRunChannelData.CurLoadPID!.I);
if (!Pid_IResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-I写入失败");
var Pid_DResult = SiemensDrive.Write(CurMeterInfo.Pid_DAddress, (short)ProRunChannelData.CurLoadPID!.D);
if (!Pid_DResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:PID-D写入失败");
}
break;
case RunStepType.Limit:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Limit
var Limit_UpResult = SiemensDrive.Write(CurMeterInfo.Limit_UpAddress, (short)ProRunChannelData.CurLoadLimit!.Up);
if (!Limit_UpResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Up写入失败");
var Limit_DownResult = SiemensDrive.Write(CurMeterInfo.Limit_DownAddress, (short)ProRunChannelData.CurLoadLimit!.Down);
if (!Limit_DownResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:Limit_Down写入失败");
}
break;
case RunStepType.SlopCell:
{
var CurMeterInfo = ListPlcLoadConfigCell.FirstOrDefault(a => a.Name!.Contains(ProRunChannelData.MeterName!));
//Sv
var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!);
if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败");
}
break;
default:
break;
}
if (ProRunChannelData.RunStepType == RunStepType.SlopCell)
{
SiemensDrive.Write("D1", (short)ProRunChannelData.SV);
@@ -1612,7 +1738,7 @@ namespace CapMachine.Wpf.Services
}
Thread.Sleep(50);
//Thread.Sleep(50);
//DownLoadPID();
//stopwatch.Stop(); //停止Stopwatch
//Console.WriteLine("保存数据耗时::{0}", stopwatch.Elapsed.TotalSeconds.ToString());

File diff suppressed because it is too large Load Diff

View File

@@ -27,7 +27,8 @@ namespace CapMachine.Wpf.ViewModels
/// <param name="machineRtDataService"></param>
/// <param name="dialogService"></param>
public MonitorViewModel(ConfigService configService, IEventAggregator eventAggregator,
DataRecordService dataRecordService, SysRunService sysRunService, AlarmService alarmService, PPCService pPCService,CanDriveService canDriveService,LinDriveService linDriveService,
DataRecordService dataRecordService, SysRunService sysRunService, AlarmService alarmService, PPCService pPCService, CanDriveService canDriveService, LinDriveService linDriveService,
ProRuntimeService proRuntimeService,
MachineRtDataService machineRtDataService, IDialogService dialogService)
{
ConfigService = configService;
@@ -39,10 +40,12 @@ namespace CapMachine.Wpf.ViewModels
PPCService = pPCService;
CanDriveService = canDriveService;
LinDriveService = linDriveService;
ProRuntimeService = proRuntimeService;
MachineRtDataService = machineRtDataService;
DialogService = dialogService;
TagManager = MachineRtDataService.TagManger;
_EventAggregator.GetEvent<ChartRtEvent>().Subscribe(GetChartRtEvent);
_EventAggregator.GetEvent<ProRunEvent>().Subscribe(GetProRunEvent);
//赋值实例化
ListHandSwitchData = MachineRtDataService.ListHandSwitchData;
@@ -76,6 +79,7 @@ namespace CapMachine.Wpf.ViewModels
public PPCService PPCService { get; }
public CanDriveService CanDriveService { get; }
public LinDriveService LinDriveService { get; }
public ProRuntimeService ProRuntimeService { get; }
public MachineRtDataService MachineRtDataService { get; }
public IDialogService DialogService { get; }
public List<ChartRtValue> ListChartRtValue { get; set; } = new List<ChartRtValue>()
@@ -214,6 +218,11 @@ namespace CapMachine.Wpf.ViewModels
return _OperCmd;
}
}
/// <summary>
/// 操作指令执行方法
/// </summary>
@@ -223,59 +232,77 @@ namespace CapMachine.Wpf.ViewModels
switch (Par)
{
case "开始":
MachineRtDataService.SysStart();
this.SysRunServer.MachineRunState1.FireStart();
DataRecordService.StartRecord();
break;
case "结束":
MachineRtDataService.SysEnd();
this.SysRunServer.MachineRunState1.FireEnd();
DataRecordService.EndRecord();
//结束运行的时候需要将压缩机的速度值设置为0
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
//状态机运行 用状态机的状态判断逻辑
if (this.SysRunServer.MachineRunState1.FireStart())
{
case CanLinEnum.Can:
//获取PLC的SV数据 更新SV的速度值到压缩机
CanDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
case CanLinEnum.Lin:
//获取PLC的SV数据 更新SV的速度值到压缩机
LinDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
default:
break;
//程序步骤执行开始运行
ProRuntimeService.StartProRun();
//运行 一些PLC的状态写入
MachineRtDataService.SysStart();
//开始记录数据
DataRecordService.StartRecord();
}
break;
case "结束":
//状态机结束 用状态机的状态判断逻辑
if (this.SysRunServer.MachineRunState1.FireEnd())
{
//程序步骤执行结束运行
ProRuntimeService.EndProRun();
//结束 一些PLC的状态写入
MachineRtDataService.SysEnd();
//结束记录数据
DataRecordService.EndRecord();
//结束运行的时候需要将压缩机的速度值设置为0
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的SV数据 更新SV的速度值到压缩机
CanDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
case CanLinEnum.Lin:
//获取PLC的SV数据 更新SV的速度值到压缩机
LinDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
default:
break;
}
}
break;
case "复位":
MachineRtDataService.SysReset();
this.SysRunServer.MachineRunState1.FireReset();
DataRecordService.EndRecord();
//结束运行的时候需要将压缩机的速度值设置为0
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
//状态机 复位 用状态机的状态判断逻辑
if (this.SysRunServer.MachineRunState1.FireReset())
{
case CanLinEnum.Can:
//获取PLC的SV数据 更新SV的速度值到压缩机
CanDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
case CanLinEnum.Lin:
//获取PLC的SV数据 更新SV的速度值到压缩机
LinDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
default:
break;
//程序步骤执行结束运行
ProRuntimeService.EndProRun();
//复位 一些PLC的状态写入
MachineRtDataService.SysReset();
//结束记录数据
DataRecordService.EndRecord();
//结束运行的时候需要将压缩机的速度值设置为0
switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin)
{
case CanLinEnum.Can:
//获取PLC的SV数据 更新SV的速度值到压缩机
CanDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
case CanLinEnum.Lin:
//获取PLC的SV数据 更新SV的速度值到压缩机
LinDriveService.UpdateSpeedCmdData(0);
//itemTag.Value.EngPvValue = 0;
break;
default:
break;
}
}
break;
@@ -287,8 +314,26 @@ namespace CapMachine.Wpf.ViewModels
break;
case "暂停":
MachineRtDataService.SysPause();
//状态机 暂停 用状态机的状态判断逻辑
if (this.SysRunServer.MachineRunState1.FirePause())
{
//程序步骤执行暂停运行
ProRuntimeService.PauseProRun();
//暂停 一些PLC的状态写入
MachineRtDataService.SysPause();
}
break;
case "继续":
//状态机 继续 用状态机的状态判断逻辑
if (this.SysRunServer.MachineRunState1.FireContinue())
{
//程序步骤执行继续运行
ProRuntimeService.ContinueProRun();
//继续 一些PLC的状态写入
MachineRtDataService.SysContinue();
}
//ShowDialogExpInfo();
break;
case "试验信息":
@@ -303,6 +348,28 @@ namespace CapMachine.Wpf.ViewModels
}
/// <summary>
/// 程序运行的状态
/// 来自于程序的自动调度执行
/// </summary>
/// <param name="msg"></param>
/// <exception cref="NotImplementedException"></exception>
private void GetProRunEvent(ProRunEventMsg msg)
{
switch (msg.Msg)
{
case "执行完毕":
OperCmdCall("结束");
break;
default:
break;
}
}
private DelegateCommand<object> _AutoHandCmd;
/// <summary>
/// 操作指令你

View File

@@ -2297,46 +2297,6 @@ namespace CapMachine.Wpf.ViewModels
}
}
private DelegateCommand<string> _ProRunSelectedDelete1;
/// <summary>
/// 删除命令
/// </summary>
public DelegateCommand<string> ProRunSelectedDelete1
{
set
{
_ProRunSelectedDelete1 = value;
}
get
{
if (_ProRunSelectedDelete1 == null)
{
_ProRunSelectedDelete1 = new DelegateCommand<string>((p) => ProRunSelectedDelete1Method(p));
}
return _ProRunSelectedDelete1;
}
}
private void ProRunSelectedDelete1Method(string Par)
{
if (Par.Contains("1"))
{
ProRuntimeService.EndProRun();
}
else if (Par.Contains("2"))
{
ProRuntimeService.PauseProRun();
}
else if (Par.Contains("3"))
{
ProRuntimeService.ContinueProRun();
}
else
{
}
}
private DelegateCommand _GenProPlcCmd;
/// <summary>
/// 新增命令

View File

@@ -277,7 +277,7 @@
FontSize="26"
FontWeight="Bold"
Foreground="LimeGreen"
Text="{Binding MachineRtDataService.CurSysExdInfo.RunTimeMsg}" />
Text="{Binding ProRuntimeService.ProRunTimeCalcModel.ProRunTimeStr}" />
</StackPanel>
</materialDesign:Card>
@@ -341,14 +341,12 @@
Width="100"
Margin="5,0"
HorizontalAlignment="Center"
Background="Green"
BorderBrush="Blue"
BorderThickness="2"
Command="{Binding OperCmd}"
CommandParameter="开始"
GroupName="OpRunStop"
IsChecked="{Binding MachineRtDataService.SysExdBoolInfos.StartRunStateQuickTag.Value}"
Style="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}">
GroupName="OpRunStop">
<!-- Style="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}" Background="Green" IsChecked="{Binding SysRunServer.MachineRunState1.BtnStartState}" -->
<RadioButton.Content>
<StackPanel Orientation="Horizontal">
<TextBlock
@@ -364,17 +362,28 @@
Text="开始" />
</StackPanel>
</RadioButton.Content>
<RadioButton.Style>
<Style BasedOn="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}" TargetType="RadioButton">
<Style.Triggers>
<DataTrigger Binding="{Binding SysRunServer.MachineRunState1.BtnStartState}" Value="true">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding SysRunServer.MachineRunState1.BtnStartState}" Value="false">
<Setter Property="Background" Value="Gray" />
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
</RadioButton>
<RadioButton
Width="100"
HorizontalAlignment="Center"
Background="Green"
BorderBrush="Blue"
BorderThickness="2"
Command="{Binding OperCmd}"
CommandParameter="结束"
GroupName="OpRunStop"
Style="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}">
GroupName="OpRunStop">
<!-- Style="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}" Background="Green" IsChecked="{Binding SysRunServer.MachineRunState1.BtnEndState}" -->
<RadioButton.Content>
<StackPanel Orientation="Horizontal">
<TextBlock
@@ -390,6 +399,18 @@
Text="结束" />
</StackPanel>
</RadioButton.Content>
<RadioButton.Style>
<Style BasedOn="{StaticResource MaterialDesignChoiceChipSecondaryRadioButton}" TargetType="RadioButton">
<Style.Triggers>
<DataTrigger Binding="{Binding SysRunServer.MachineRunState1.BtnEndState}" Value="true">
<Setter Property="Background" Value="Green" />
</DataTrigger>
<DataTrigger Binding="{Binding SysRunServer.MachineRunState1.BtnEndState}" Value="false">
<Setter Property="Background" Value="Gray" />
</DataTrigger>
</Style.Triggers>
</Style>
</RadioButton.Style>
</RadioButton>
<!-- 分隔符 -->
@@ -432,6 +453,22 @@
<TextBlock Text="暂停" />
</StackPanel>
</Button>
<Button
Margin="5,0"
Command="{Binding OperCmd}"
CommandParameter="继续"
Foreground="White">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="2,0"
VerticalAlignment="Center"
FontFamily="/Assets/Fonts/#iconfont"
FontSize="14"
Foreground="White"
Text="&#xe893;" />
<TextBlock Text="继续" />
</StackPanel>
</Button>
<Button
Margin="5,0"
Command="{Binding OperCmd}"

View File

@@ -523,73 +523,7 @@
Text="删除" />
</StackPanel>
</Button>
<Button
Width="80"
Height="25"
Margin="2"
Background="Yellow"
Command="{Binding ProRunSelectedDelete1}"
CommandParameter="1"
Style="{StaticResource MaterialDesignOutlinedDarkButton}"
ToolTip="停止">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,2,0"
VerticalAlignment="Center"
FontFamily="/Assets/Fonts/#iconfont"
FontSize="14"
Text="&#xe910;" />
<TextBlock
VerticalAlignment="Center"
FontSize="14"
Text="停止" />
</StackPanel>
</Button>
<Button
Width="80"
Height="25"
Margin="2"
Background="Yellow"
Command="{Binding ProRunSelectedDelete1}"
CommandParameter="2"
Style="{StaticResource MaterialDesignOutlinedDarkButton}"
ToolTip="暂停">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,2,0"
VerticalAlignment="Center"
FontFamily="/Assets/Fonts/#iconfont"
FontSize="14"
Text="&#xe910;" />
<TextBlock
VerticalAlignment="Center"
FontSize="14"
Text="暂停" />
</StackPanel>
</Button>
<Button
Width="80"
Height="25"
Margin="2"
Background="Yellow"
Command="{Binding ProRunSelectedDelete1}"
CommandParameter="3"
Style="{StaticResource MaterialDesignOutlinedDarkButton}"
ToolTip="继续">
<StackPanel Orientation="Horizontal">
<TextBlock
Margin="0,0,2,0"
VerticalAlignment="Center"
FontFamily="/Assets/Fonts/#iconfont"
FontSize="14"
Text="&#xe910;" />
<TextBlock
VerticalAlignment="Center"
FontSize="14"
Text="继续" />
</StackPanel>
</Button>
</StackPanel>
</StackPanel>