From 43e0ff62e7225c468c44573d9d35b95f4ead313e Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Mon, 14 Apr 2025 10:33:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9F=E5=BA=A6=E7=9A=84=E6=8B=93=E5=B1=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E5=AF=B9=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChannelModel/ProRunChannelData.cs | 6 + CapMachine.Wpf/Dtos/MeterExInfoDto.cs | 31 ++++ CapMachine.Wpf/Models/PlcExdConfigCell.cs | 30 ++++ .../Models/ProModelPars/ProExModel.cs | 24 ++- .../Models/ProModelPars/ProStepExe.cs | 7 + CapMachine.Wpf/Models/ProModelPars/StepExd.cs | 50 ++++++ .../Services/MachineRtDataService.cs | 157 +++++++++++++----- CapMachine.Wpf/Services/ProRuntimeService.cs | 24 ++- .../ViewModels/ProConfigViewModel.cs | 69 ++++++++ CapMachine.Wpf/Views/ProConfigView.xaml | 124 +++++++++++++- 10 files changed, 470 insertions(+), 52 deletions(-) create mode 100644 CapMachine.Wpf/Models/PlcExdConfigCell.cs create mode 100644 CapMachine.Wpf/Models/ProModelPars/StepExd.cs diff --git a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs index 555df7c..3a9805d 100644 --- a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs +++ b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs @@ -53,5 +53,11 @@ namespace CapMachine.Wpf.ChannelModel /// public Limit? CurLoadLimit { get; set; } + /// + /// 拓展参数集合 + /// 比如:速度参数拓展的输出锁定、吸排气阀,压缩机使能等这些拓展参数 + /// 也可以是其他参数附带的拓展信息 + /// + public List? ListStepExd { get; set; } } } diff --git a/CapMachine.Wpf/Dtos/MeterExInfoDto.cs b/CapMachine.Wpf/Dtos/MeterExInfoDto.cs index a7db1ed..05a7f69 100644 --- a/CapMachine.Wpf/Dtos/MeterExInfoDto.cs +++ b/CapMachine.Wpf/Dtos/MeterExInfoDto.cs @@ -61,5 +61,36 @@ namespace CapMachine.Wpf.Dtos get { return _IsTimeOk; } set { _IsTimeOk = value; RaisePropertyChanged(); } } + + private int _DefaultPIDNo; + /// + /// DefaultPIDNo + /// + public int DefaultPIDNo + { + get { return _DefaultPIDNo; } + set { _DefaultPIDNo = value; RaisePropertyChanged(); } + } + + private int _DefaultLimitNo; + /// + /// DefaultLimitNo + /// + public int DefaultLimitNo + { + get { return _DefaultLimitNo; } + set { _DefaultLimitNo = value; RaisePropertyChanged(); } + } + + private int _DefaultAlarmNo; + /// + /// DefaultAlarmNo + /// + public int DefaultAlarmNo + { + get { return _DefaultAlarmNo; } + set { _DefaultAlarmNo = value; RaisePropertyChanged(); } + } + } } diff --git a/CapMachine.Wpf/Models/PlcExdConfigCell.cs b/CapMachine.Wpf/Models/PlcExdConfigCell.cs new file mode 100644 index 0000000..7000570 --- /dev/null +++ b/CapMachine.Wpf/Models/PlcExdConfigCell.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models +{ + /// + /// PLC加载配置拓展单元-包括 压缩机使能、吸排气阀、输出锁定等 + /// 下载PLC数据,用整型的数据下载,但是我们这边可能是浮点数,需要格式的转换,精度的转换 + /// + public class PlcExdConfigCell + { + /// + /// 配置字段 名称 + /// + public string? Name { get; set; } + + /// + /// 地址 + /// + public string? Address { get; set; } + + /// + /// 精度 1,10,100,1000 + /// + public int Precision { get; set; } + } +} diff --git a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs index 155cca9..1f396f9 100644 --- a/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs +++ b/CapMachine.Wpf/Models/ProModelPars/ProExModel.cs @@ -41,7 +41,7 @@ namespace CapMachine.Wpf.Models.ProModelPars /// /// 是否是速度仪表参数 /// - public bool IsSpeed { get; set; }=false; + public bool IsSpeed { get; set; } = false; /// /// 程序执行管道 @@ -155,7 +155,7 @@ namespace CapMachine.Wpf.Models.ProModelPars //RunEnable = false; //时间到了触发下载下一步步骤 - + //不为空的数据 if (NextProStepExe == null) @@ -210,6 +210,9 @@ namespace CapMachine.Wpf.Models.ProModelPars 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), + + ListStepExd = GetStepExds(NextProStepExe),//拓展参数 + }); //存在坡度数据 @@ -247,6 +250,8 @@ namespace CapMachine.Wpf.Models.ProModelPars 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, true), + + ListStepExd = GetStepExds(NextProStepExe),//拓展参数 }); Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【参数名称】:{MeterName} " + $"【程序Seg】{CurProStepExe.ProSegName} " + @@ -309,6 +314,21 @@ namespace CapMachine.Wpf.Models.ProModelPars } } + + /// + /// 获取拓展信息 + /// 一般是速度有这些参数 + /// + /// + private List GetStepExds(ProStepExe proStepExe) + { + if (proStepExe.ListStepExd != null && proStepExe.ListStepExd.Count() > 0) + { + return proStepExe.ListStepExd; + } + return null; + } + /// /// 当前步骤已经运行时长-秒 /// diff --git a/CapMachine.Wpf/Models/ProModelPars/ProStepExe.cs b/CapMachine.Wpf/Models/ProModelPars/ProStepExe.cs index 556f0ac..03bc87d 100644 --- a/CapMachine.Wpf/Models/ProModelPars/ProStepExe.cs +++ b/CapMachine.Wpf/Models/ProModelPars/ProStepExe.cs @@ -135,5 +135,12 @@ namespace CapMachine.Wpf.Models.ProModelPars /// AlarmNo的配置信息 /// public ConfigAlarmDto? CurConfigAlarmDto { get; set; } + + /// + /// 拓展参数集合 + /// 比如:速度参数拓展的输出锁定、吸排气阀,压缩机使能等这些拓展参数 + /// 也可以是其他参数附带的拓展信息 + /// + public List? ListStepExd { get; set; } } } diff --git a/CapMachine.Wpf/Models/ProModelPars/StepExd.cs b/CapMachine.Wpf/Models/ProModelPars/StepExd.cs new file mode 100644 index 0000000..193685e --- /dev/null +++ b/CapMachine.Wpf/Models/ProModelPars/StepExd.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models.ProModelPars +{ + /// + /// ProStepExe 参数执行的拓展参数 + /// 比如:速度参数拓展的输出锁定、吸排气阀,压缩机使能等这些拓展参数 + /// + public class StepExd + { + /// + /// 参数名称 + /// + public string? Name { get; set; } + + /// + /// 值信息 + /// + public object? Value { get; set; } + + /// + /// 值类型 + /// + public ExdValueType ValueType { get; set; } + } + + + /// + /// 值类型 + /// + public enum ExdValueType + { + /// + /// 布尔 + /// + Bool=1, + /// + /// 整型数据 + /// + Short=2, + /// + /// 浮点数 + /// + Double=3, + } +} diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 308e499..8e691d0 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -104,6 +104,11 @@ namespace CapMachine.Wpf.Services /// public List ListPlcLoadConfigCell { get; set; } + /// + /// PLC加载配置拓展数据集合 + /// + public List ListPlcExdConfigCell { get; set; } + /// /// 标签管理中心 /// @@ -2225,6 +2230,14 @@ namespace CapMachine.Wpf.Services new HandSwitchData(){Name="使能",ActionAddress="M2.7",StateAddress="V15.1" }, }; + ListPlcExdConfigCell = new List() + { + new PlcExdConfigCell(){ Name="输出锁定",Address="VW482",Precision=1}, + new PlcExdConfigCell(){ Name="吸排气阀",Address="VW490",Precision=1}, + new PlcExdConfigCell(){ Name="EV",Address="VW492",Precision=1}, + new PlcExdConfigCell(){ Name="压缩机使能",Address="VW484",Precision=1}, + new PlcExdConfigCell(){ Name="PTC使能",Address="VW486",Precision=1}, + }; //TagManger.ListTag[0].Name = "new TestType() { byteValue=12}"; @@ -2434,7 +2447,6 @@ namespace CapMachine.Wpf.Services { var IPInfo = ConfigHelper.GetValue("PLCIP"); - SiemensDrive = new SiemensS7Net(SiemensPLCS.S200Smart, IPInfo); // 连接对象 OperateResult connect = SiemensDrive.ConnectServer(); @@ -2543,7 +2555,7 @@ namespace CapMachine.Wpf.Services await Task.Delay(20); - + try @@ -2674,7 +2686,7 @@ namespace CapMachine.Wpf.Services //地址为空的话则下一个 if (string.IsNullOrEmpty(mVModel!.Address)) continue; //给MvModel的原始属性赋值 MV是0-100 % 有标准的转换格式 - mVModel!.EngValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockMVRead.Content, mVModel.BlockIndex)*1.0/10; + mVModel!.EngValue = SiemensDrive.ByteTransform.TransInt16(OperateResultBlockMVRead.Content, mVModel.BlockIndex) * 1.0 / 10; } //MV 手自动切换 只有控制才有MVAM控制 @@ -2879,17 +2891,24 @@ namespace CapMachine.Wpf.Services SendSpeedSvToCap(ProRunChannelData.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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Pid_PAddress)) + { + 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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Limit_UpAddress)) + { + 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: @@ -2900,13 +2919,17 @@ namespace CapMachine.Wpf.Services if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); //速度SV到压缩机 SendSpeedSvToCap(ProRunChannelData.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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Pid_PAddress)) + { + 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: @@ -2919,10 +2942,14 @@ namespace CapMachine.Wpf.Services SendSpeedSvToCap(ProRunChannelData.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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Limit_UpAddress)) + { + 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: @@ -2939,40 +2966,57 @@ namespace CapMachine.Wpf.Services 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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Pid_PAddress)) + { + 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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Limit_UpAddress)) + { + 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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Pid_PAddress)) + { + 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写入失败"); + if (!string.IsNullOrEmpty(CurMeterInfo.Limit_UpAddress)) + { + 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: @@ -2990,6 +3034,33 @@ namespace CapMachine.Wpf.Services break; } + //拓展参数 + if (ProRunChannelData.ListStepExd != null && ProRunChannelData.ListStepExd.Count() > 0) + { + foreach (var itemStepExd in ProRunChannelData.ListStepExd) + { + var DataAdrees = ListPlcExdConfigCell.FirstOrDefault(a => a.Name == itemStepExd.Name); + if (DataAdrees != null) + { + switch (itemStepExd.ValueType) + { + case ExdValueType.Bool: + SiemensDrive.Write(DataAdrees.Address, (bool)itemStepExd.Value == true ? 1 : 0); + break; + case ExdValueType.Short: + SiemensDrive.Write(DataAdrees.Address, (short)itemStepExd.Value); + break; + case ExdValueType.Double: + break; + default: + break; + } + + } + } + } + + if (ProRunChannelData.RunStepType == RunStepType.SlopCell) { //SiemensDrive.Write("D1", (short)ProRunChannelData.SV); diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index 12a7495..fc72c30 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -38,8 +38,8 @@ namespace CapMachine.Wpf.Services /// /// 实例化函数 /// - public ProRuntimeService(IFreeSql freeSql, IMapper mapper, IEventAggregator eventAggregator, - MachineRtDataService machineRtDataService,ConfigService configService, CanDriveService canDriveService, LinDriveService linDriveService, + public ProRuntimeService(IFreeSql freeSql, IMapper mapper, IEventAggregator eventAggregator, + MachineRtDataService machineRtDataService, ConfigService configService, CanDriveService canDriveService, LinDriveService linDriveService, ILogService logService) { FreeSql = freeSql; @@ -165,7 +165,7 @@ namespace CapMachine.Wpf.Services ListPlcLoadConfigCell.Add(new PlcLoadConfigCell() { Name = itemKeyValue.Key, - SvAddress = MachineRtDataService.TagManger.TryGetSVModel(itemKeyValue.Value.Name,out MeterValueAttrCell? controlAttrCell)==true? controlAttrCell!.Address:"", + SvAddress = MachineRtDataService.TagManger.TryGetSVModel(itemKeyValue.Value.Name, out MeterValueAttrCell? controlAttrCell) == true ? controlAttrCell!.Address : "", Limit_UpAddress = MachineRtDataService.TagManger.TryGetLimitUpModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell2) == true ? controlAttrCell2!.Address : "", Limit_DownAddress = MachineRtDataService.TagManger.TryGetLimitDownModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell3) == true ? controlAttrCell3!.Address : "", Pid_PAddress = MachineRtDataService.TagManger.TryGetPidPModel(itemKeyValue.Value.Name, out MeterExdAttrCell? controlAttrCell4) == true ? controlAttrCell4!.Address : "", @@ -359,6 +359,14 @@ namespace CapMachine.Wpf.Services CurConfigLimitDto = Mapper.Map(Limit), CurConfigAlarmDto = Mapper.Map(Alarm), + ListStepExd = new List() + { + new StepExd(){ Name="输出锁定",Value=itemMeterValueCell.OutLock,ValueType=ExdValueType.Bool}, + new StepExd(){ Name="吸排气阀",Value=itemMeterValueCell.InhExhValve,ValueType=ExdValueType.Bool}, + new StepExd(){ Name="EV",Value=(short)itemMeterValueCell.Ev,ValueType=ExdValueType.Short}, + new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, + }, + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", }); @@ -416,6 +424,14 @@ namespace CapMachine.Wpf.Services CurConfigLimitDto = Mapper.Map(Limit), CurConfigAlarmDto = Mapper.Map(Alarm), + ListStepExd = new List() + { + new StepExd(){ Name="输出锁定",Value=itemMeterValueCell.OutLock,ValueType=ExdValueType.Bool}, + new StepExd(){ Name="吸排气阀",Value=itemMeterValueCell.InhExhValve,ValueType=ExdValueType.Bool}, + new StepExd(){ Name="EV",Value=(short)itemMeterValueCell.Ev,ValueType=ExdValueType.Short}, + new StepExd(){ Name="压缩机使能",Value=itemMeterValueCell.CapEnable,ValueType=ExdValueType.Bool}, + }, + ProStepInfo = $"{itemStep.StepNo}-{itemMeterValueCell.StepNo}", MeterName = CurMeterName, }); @@ -3220,7 +3236,7 @@ namespace CapMachine.Wpf.Services { Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【Msg】:程序运行结束 《《《《-------------------"); //EndProRun(); - + EventAggregator.GetEvent().Publish(new ProRunEventMsg() { Machine = "M1", Msg = "执行完毕" }); MachineRunState1.RunStateMsg = "执行完毕"; diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index 6b76749..0672408 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -2658,6 +2658,7 @@ namespace CapMachine.Wpf.ViewModels return _SpeedConstSaveCmd; } } + /// /// 常值保存命令 速度 /// @@ -3250,6 +3251,74 @@ namespace CapMachine.Wpf.ViewModels } + private DelegateCommand _SpeedExdDefaultCmd; + /// + /// 速度的默认参数 PID LIMIT ALARM NO 配置弹窗 + /// + public DelegateCommand SpeedExdDefaultCmd + { + set + { + _SpeedExdDefaultCmd = value; + } + get + { + if (_SpeedExdDefaultCmd == null) + { + _SpeedExdDefaultCmd = new DelegateCommand((str) => SpeedExdDefaultCmdMethod(str)); + } + return _SpeedExdDefaultCmd; + } + } + /// + /// 速度的默认参数 PID LIMIT ALARM NO 配置弹窗 + /// + /// + /// + private void SpeedExdDefaultCmdMethod(string Par) + { + switch (Par) + { + case "PID": + //弹窗 + DialogService.ShowDialog("DialogPIDConfigView", new DialogParameters() { { "Name", "转速" } }, (par) => + { + if (par.Result == ButtonResult.OK) + { + //程序名称 + var ReturnValue = par.Parameters.GetValue("Name"); + + } + else if (par.Result == ButtonResult.Cancel) + { + //取消 + + } + }); + break; + case "Limit": + //弹窗 + DialogService.ShowDialog("DialogLimitConfigView", new DialogParameters() { { "Name", "转速" } }, (par) => + { + if (par.Result == ButtonResult.OK) + { + //程序名称 + var ReturnValue = par.Parameters.GetValue("Name"); + + } + else if (par.Result == ButtonResult.Cancel) + { + //取消 + + } + + }); + break; + default: + break; + } + } + #endregion /// diff --git a/CapMachine.Wpf/Views/ProConfigView.xaml b/CapMachine.Wpf/Views/ProConfigView.xaml index 0462907..c9f5c34 100644 --- a/CapMachine.Wpf/Views/ProConfigView.xaml +++ b/CapMachine.Wpf/Views/ProConfigView.xaml @@ -935,7 +935,7 @@ Margin="3,0" FontSize="20" Foreground="White" - Text="速度设置" /> + Text="转速设置" /> @@ -965,7 +965,10 @@ - + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +