diff --git a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs index 4b358e1..555df7c 100644 --- a/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs +++ b/CapMachine.Wpf/ChannelModel/ProRunChannelData.cs @@ -41,7 +41,7 @@ namespace CapMachine.Wpf.ChannelModel /// /// 值 /// - public int? SV { get; set; } + public int SV { get; set; } /// /// PID的配置信息 diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 0dcca6c..d160f9c 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -1372,27 +1372,7 @@ namespace CapMachine.Wpf.Services TagManger.GetTagByName(itemTag.Value.Name)!.EngSvValue = OperateResultSVShort.Content * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; LinkState = true; - //在运行时,更新速度的SV的值 - if (itemTag.Value.Name == "转速[rpm]" && SysRunService.MachineRunState1.RunStateMsg == "运行") - { - switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) - { - case CanLinEnum.Can: - //获取PLC的SV数据 更新SV的速度值到压缩机 - CanDriveService.UpdateSpeedCmdData(itemTag!.Value.EngSvValue); - //itemTag.Value.EngPvValue = 0; - break; - case CanLinEnum.Lin: - //获取PLC的SV数据 更新SV的速度值到压缩机 - LinDriveService.UpdateSpeedCmdData(itemTag!.Value.EngSvValue); - //itemTag.Value.EngPvValue = 0; - break; - default: - break; - } - ////更新SV的速度值 - //CanDriveService.UpdateSpeedCmdData(TagManger.GetTagByName(itemTag.Value.Name)!.EngSvValue); - } + } else { @@ -1614,6 +1594,9 @@ namespace CapMachine.Wpf.Services //Sv var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); 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写入失败"); @@ -1634,6 +1617,8 @@ namespace CapMachine.Wpf.Services //Sv var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); 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写入失败"); @@ -1649,6 +1634,9 @@ namespace CapMachine.Wpf.Services //Sv var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //速度SV到压缩机 + 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写入失败"); @@ -1662,6 +1650,9 @@ namespace CapMachine.Wpf.Services //Sv var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //速度SV到压缩机 + SendSpeedSvToCap(ProRunChannelData.SV); + } break; case RunStepType.LimitPid: @@ -1709,6 +1700,9 @@ namespace CapMachine.Wpf.Services //Sv var SvResult = SiemensDrive.Write(CurMeterInfo!.SvAddress, (short)ProRunChannelData.SV!); if (!SvResult.IsSuccess) Console.WriteLine($"{ProRunChannelData.MeterName}:SV写入失败"); + //速度SV到压缩机 + SendSpeedSvToCap(ProRunChannelData.SV); + } break; default: @@ -1746,6 +1740,28 @@ namespace CapMachine.Wpf.Services } } + /// + /// 发送速度SV到压缩机 + /// + private void SendSpeedSvToCap(int SpeedSv) + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + //获取PLC的SV数据 更新SV的速度值到压缩机 + CanDriveService.UpdateSpeedCmdData(SpeedSv); + //itemTag.Value.EngPvValue = 0; + break; + case CanLinEnum.Lin: + //获取PLC的SV数据 更新SV的速度值到压缩机 + LinDriveService.UpdateSpeedCmdData(SpeedSv); + //itemTag.Value.EngPvValue = 0; + break; + default: + break; + } + } + #endregion } } diff --git a/CapMachine.Wpf/Services/ProRuntimeService.cs b/CapMachine.Wpf/Services/ProRuntimeService.cs index ba597ba..f195d22 100644 --- a/CapMachine.Wpf/Services/ProRuntimeService.cs +++ b/CapMachine.Wpf/Services/ProRuntimeService.cs @@ -38,17 +38,20 @@ namespace CapMachine.Wpf.Services /// /// 实例化函数 /// - public ProRuntimeService(IFreeSql freeSql, IMapper mapper, IEventAggregator eventAggregator, MachineRtDataService machineRtDataService, ILogService logService) + public ProRuntimeService(IFreeSql freeSql, IMapper mapper, IEventAggregator eventAggregator, + MachineRtDataService machineRtDataService,ConfigService configService, CanDriveService canDriveService, LinDriveService linDriveService, + ILogService logService) { FreeSql = freeSql; Mapper = mapper; EventAggregator = eventAggregator; MachineRtDataService = machineRtDataService; - + ConfigService = configService; + CanDriveService = canDriveService; + LinDriveService = linDriveService; ProRunChannel = MachineRtDataService.ProRunChannel; LogService = logService; - //实例化函数 ListProExModel = new List(); #region 初始化程序执行模型 @@ -152,9 +155,6 @@ namespace CapMachine.Wpf.Services #endregion - - - //从变量集合中加载PLC转制的配置数据 ListPlcLoadConfigCell = new List(); foreach (var itemKeyValue in MachineRtDataService.TagManger.DicTags) @@ -191,10 +191,11 @@ namespace CapMachine.Wpf.Services //反写给MachineRtDataService,MachineRtDataService也要写到PLC中 MachineRtDataService.ListPlcLoadConfigCell = ListPlcLoadConfigCell; - //驱动实例 SiemensDrive = MachineRtDataService.SiemensDrive; + MachineRunState1 = new MachineRunState("M1", EventAggregator, ConfigService, canDriveService, linDriveService); + //程序运行实时管道数据监听 //Task.Run(() => ListenProRunChannelAction()); @@ -209,7 +210,9 @@ namespace CapMachine.Wpf.Services public IMapper Mapper { get; } public IEventAggregator EventAggregator { get; } public MachineRtDataService MachineRtDataService { get; } - + public ConfigService ConfigService { get; } + public CanDriveService CanDriveService { get; } + public LinDriveService LinDriveService { get; } public ILogService LogService { get; } /// @@ -232,6 +235,12 @@ namespace CapMachine.Wpf.Services /// public List ListPlcLoadConfigCell { get; set; } + /// + /// 设备运行状态 + /// + public MachineRunState MachineRunState1 { get; set; } + + /// /// 加载选中的程序运行集合 /// 目前步骤设置常值,是OK的,但是在斜坡多步骤里面也可以设置 50-50 10秒的常值设置,那么在打点时,上面的两个常值都能识别 @@ -3212,9 +3221,11 @@ namespace CapMachine.Wpf.Services private void ProRuntimeService_SpeedRunEndEvent(object? sender, string e) { Console.WriteLine($"【时间】{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")} 【Msg】:程序运行结束 《《《《-------------------"); - EndProRun(); - + //EndProRun(); + EventAggregator.GetEvent().Publish(new ProRunEventMsg() { Machine = "M1", Msg = "执行完毕" }); + + MachineRunState1.RunStateMsg = "执行完毕"; } /// diff --git a/CapMachine.Wpf/Services/SysRunService.cs b/CapMachine.Wpf/Services/SysRunService.cs index 5b842a4..677d957 100644 --- a/CapMachine.Wpf/Services/SysRunService.cs +++ b/CapMachine.Wpf/Services/SysRunService.cs @@ -10,11 +10,11 @@ using System.Threading.Tasks; namespace CapMachine.Wpf.Services { /// - /// 系统 + /// 系统运行服务 /// public class SysRunService : BindableBase { - public SysRunService(IEventAggregator eventAggregator,ConfigService configService,CanDriveService canDriveService,LinDriveService linDriveService) + public SysRunService(IEventAggregator eventAggregator, ConfigService configService, CanDriveService canDriveService, LinDriveService linDriveService) { // 创建一个定时器,设置间隔时间为2000毫秒(即2秒) CurTimer = new System.Timers.Timer(5000); @@ -28,16 +28,9 @@ namespace CapMachine.Wpf.Services ConfigService = configService; CanDriveService = canDriveService; LinDriveService = linDriveService; - MachineRunState1 = new MachineRunState("M1", EventAggregator, ConfigService,canDriveService,linDriveService); } - /// - /// 设备运行状态 - /// - public MachineRunState MachineRunState1 { get; set; } - - private void CurTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) { CurDateTime = DateTime.Now; diff --git a/CapMachine.Wpf/ViewModels/FooterViewModel.cs b/CapMachine.Wpf/ViewModels/FooterViewModel.cs index 3e065bb..3461761 100644 --- a/CapMachine.Wpf/ViewModels/FooterViewModel.cs +++ b/CapMachine.Wpf/ViewModels/FooterViewModel.cs @@ -10,16 +10,18 @@ namespace CapMachine.Wpf.ViewModels { public class FooterViewModel : NavigationViewModel { - public FooterViewModel(DataRecordService dataRecordService,ConfigService configService,MachineRtDataService machineRtDataService,SysRunService sysService) + public FooterViewModel(DataRecordService dataRecordService,ConfigService configService,ProRuntimeService proRuntimeService, MachineRtDataService machineRtDataService,SysRunService sysService) { DataRecordService = dataRecordService; ConfigService = configService; + ProRuntimeService = proRuntimeService; MachineRtDataService = machineRtDataService; SysRunService = sysService; } public DataRecordService DataRecordService { get; } public ConfigService ConfigService { get; } + public ProRuntimeService ProRuntimeService { get; } public MachineRtDataService MachineRtDataService { get; } public SysRunService SysRunService { get; } } diff --git a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs index f5b9ee2..d8ec9ab 100644 --- a/CapMachine.Wpf/ViewModels/MonitorViewModel.cs +++ b/CapMachine.Wpf/ViewModels/MonitorViewModel.cs @@ -233,7 +233,7 @@ namespace CapMachine.Wpf.ViewModels { case "开始": //状态机运行 用状态机的状态判断逻辑 - if (this.SysRunServer.MachineRunState1.FireStart()) + if (this.ProRuntimeService.MachineRunState1.FireStart()) { //程序步骤执行开始运行 ProRuntimeService.StartProRun(); @@ -247,7 +247,7 @@ namespace CapMachine.Wpf.ViewModels break; case "结束": //状态机结束 用状态机的状态判断逻辑 - if (this.SysRunServer.MachineRunState1.FireEnd()) + if (this.ProRuntimeService.MachineRunState1.FireEnd()) { //程序步骤执行结束运行 ProRuntimeService.EndProRun(); @@ -277,7 +277,7 @@ namespace CapMachine.Wpf.ViewModels break; case "复位": //状态机 复位 用状态机的状态判断逻辑 - if (this.SysRunServer.MachineRunState1.FireReset()) + if (this.ProRuntimeService.MachineRunState1.FireReset()) { //程序步骤执行结束运行 ProRuntimeService.EndProRun(); @@ -315,7 +315,7 @@ namespace CapMachine.Wpf.ViewModels case "暂停": //状态机 暂停 用状态机的状态判断逻辑 - if (this.SysRunServer.MachineRunState1.FirePause()) + if (this.ProRuntimeService.MachineRunState1.FirePause()) { //程序步骤执行暂停运行 ProRuntimeService.PauseProRun(); @@ -327,7 +327,7 @@ namespace CapMachine.Wpf.ViewModels break; case "继续": //状态机 继续 用状态机的状态判断逻辑 - if (this.SysRunServer.MachineRunState1.FireContinue()) + if (this.ProRuntimeService.MachineRunState1.FireContinue()) { //程序步骤执行继续运行 ProRuntimeService.ContinueProRun(); diff --git a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs index fbc1d43..4680a32 100644 --- a/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ProConfigViewModel.cs @@ -2374,7 +2374,7 @@ namespace CapMachine.Wpf.ViewModels //ProParsSongZhiHelper.LoadDataToPLC(MachineRtDataService.SiemensDrive, ReturnPlcParsData); //下载完成的话,则标记状态 - SysRunService.MachineRunState1.IsProLoad = true; + ProRuntimeService.MachineRunState1.IsProLoad = true; } } diff --git a/CapMachine.Wpf/ViewModels/QuickMeterStepViewModel.cs b/CapMachine.Wpf/ViewModels/QuickMeterStepViewModel.cs index 9a59dbf..65c6575 100644 --- a/CapMachine.Wpf/ViewModels/QuickMeterStepViewModel.cs +++ b/CapMachine.Wpf/ViewModels/QuickMeterStepViewModel.cs @@ -21,13 +21,14 @@ namespace CapMachine.Wpf.ViewModels /// 实例化函数 /// public QuickMeterStepViewModel(IDialogService dialogService, IFreeSql freeSql, IEventAggregator eventAggregator, - IRegionManager regionManager, MachineRtDataService machineRtDataService, SysRunService sysRunService) + IRegionManager regionManager, MachineRtDataService machineRtDataService, SysRunService sysRunService,ProRuntimeService proRuntimeService) { FreeSql = freeSql; EventAggregator = eventAggregator; RegionManager = regionManager; this.MachineRtDataService = machineRtDataService; SysRunService = sysRunService; + ProRuntimeService = proRuntimeService; //MachineDataService = machineDataService; DialogService = dialogService; @@ -77,6 +78,7 @@ namespace CapMachine.Wpf.ViewModels public IRegionManager RegionManager { get; } public MachineRtDataService MachineRtDataService { get; } public SysRunService SysRunService { get; } + public ProRuntimeService ProRuntimeService { get; } /// /// 弹窗服务 @@ -321,14 +323,14 @@ namespace CapMachine.Wpf.ViewModels if (MachineRtDataService.LinkState==false) { MessageBox.Show("当前PLC链接失败,无法下载程序,但会标记下载!", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Hand); - SysRunService.MachineRunState1.IsProLoad = true; + ProRuntimeService.MachineRunState1.IsProLoad = true; return; } ProParsHelperQuick.GetPlcParsData(ListQuickMeterStepDto.ToList(), this.MachineRtDataService.SiemensDrive); //下载完成的话,则标记状态 - SysRunService.MachineRunState1.IsProLoad = true; + ProRuntimeService.MachineRunState1.IsProLoad = true; } else { diff --git a/CapMachine.Wpf/Views/FooterView.xaml b/CapMachine.Wpf/Views/FooterView.xaml index c00708f..acb26f1 100644 --- a/CapMachine.Wpf/Views/FooterView.xaml +++ b/CapMachine.Wpf/Views/FooterView.xaml @@ -69,7 +69,7 @@ Margin="5,0" FontSize="16" Foreground="White" - Text="{Binding SysRunService.MachineRunState1.RunStateMsg}" /> + Text="{Binding ProRuntimeService.MachineRunState1.RunStateMsg}" /> diff --git a/CapMachine.Wpf/Views/MonitorView.xaml b/CapMachine.Wpf/Views/MonitorView.xaml index 8d9ff9c..facf221 100644 --- a/CapMachine.Wpf/Views/MonitorView.xaml +++ b/CapMachine.Wpf/Views/MonitorView.xaml @@ -532,7 +532,7 @@ FontSize="30" FontWeight="Bold" Foreground="LimeGreen" - Text="{Binding SysRunServer.MachineRunState1.RunStateMsg}" /> + Text="{Binding ProRuntimeService.MachineRunState1.RunStateMsg}" />