From e49a48fb2542e33da5621b24cba7fcfce28804dc Mon Sep 17 00:00:00 2001 From: Tyrone CT Date: Sat, 11 Jan 2025 12:04:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=BC=B9=E7=AA=97=EF=BC=8C=E4=BD=86=E6=98=AF=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E6=88=90=E5=8A=9F=20=E6=9B=B4=E6=94=B9=E4=BA=86CAN=E5=92=8CLIN?= =?UTF-8?q?=E5=8D=8F=E8=B0=83=20=E6=9B=B4=E6=94=B9=E4=BA=86=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=A8=8B=E5=BA=8F=E7=9A=84=E5=90=8D=E7=A7=B0=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CapMachine.Core/DialogViewModel.cs | 43 +- CapMachine.Model/CANLIN/CanLinConfigPro.cs | 11 +- CapMachine.Model/CANLIN/CanLinEmun.cs | 5 - CapMachine.Model/CANLIN/LINConfigExd.cs | 35 + CapMachine.Shared/Controls/Meter.xaml | 38 +- CapMachine.Shared/Controls/Meter.xaml.cs | 46 +- CapMachine.Wpf/App.xaml | 26 +- CapMachine.Wpf/App.xaml.cs | 66 +- CapMachine.Wpf/Assets/Images/Logo.png | Bin 0 -> 261121 bytes CapMachine.Wpf/CanDrive/ToomossCan.cs | 14 + CapMachine.Wpf/CapMachine.Wpf.csproj | 6 + CapMachine.Wpf/Dtos/LINConfigExdDto.cs | 47 + CapMachine.Wpf/LinDrive/LDFParser.cs | 73 + CapMachine.Wpf/LinDrive/LinCmdData.cs | 35 + CapMachine.Wpf/LinDrive/LinLdfModel.cs | 93 ++ CapMachine.Wpf/LinDrive/ToomossLin.cs | 423 ++++++ CapMachine.Wpf/LinDrive/USB2LIN_EX.cs | 106 ++ CapMachine.Wpf/LinDrive/USB_DEVICE.cs | 140 ++ .../MapperProfile/LINConfigExdProfile.cs | 19 + CapMachine.Wpf/Models/CanLinRunStateModel.cs | 68 + CapMachine.Wpf/Models/ComEnum.cs | 21 + CapMachine.Wpf/Models/SysExdInfo.cs | 65 + CapMachine.Wpf/Models/Tag/QuickTag.cs | 147 ++ CapMachine.Wpf/Services/AppStartService.cs | 160 +++ CapMachine.Wpf/Services/ApplicationContext.cs | 16 + CapMachine.Wpf/Services/CanDriveService.cs | 18 + CapMachine.Wpf/Services/ComActionService.cs | 45 +- CapMachine.Wpf/Services/ConfigService.cs | 34 +- CapMachine.Wpf/Services/DialogExtensions.cs | 75 + CapMachine.Wpf/Services/DialogHostService.cs | 108 ++ CapMachine.Wpf/Services/IAppStartService.cs | 20 + CapMachine.Wpf/Services/IAppTaskBar.cs | 15 + .../Services/IApplicationContext.cs | 31 + CapMachine.Wpf/Services/IHostDialogAware.cs | 37 + CapMachine.Wpf/Services/IHostDialogService.cs | 31 + CapMachine.Wpf/Services/LinDriveService.cs | 273 ++++ .../Services/MachineRtDataService.cs | 113 +- .../Services/NavigationMenuService.cs | 1 + .../ViewModels/ActionLogViewModel.cs | 14 +- .../ViewModels/CANConfigViewModel.cs | 59 +- .../DialogCanLinConfigCreateViewModel.cs | 2 +- .../ViewModels/HostDialogViewModel.cs | 60 + .../ViewModels/LinConfigViewModel.cs | 1224 +++++++++++++++++ .../ViewModels/SplashScreenViewModel.cs | 55 + CapMachine.Wpf/ViewModels/TaskBarViewModel.cs | 41 + CapMachine.Wpf/Views/CANConfigView.xaml | 32 +- CapMachine.Wpf/Views/FooterView.xaml | 43 + CapMachine.Wpf/Views/LINConfigView.xaml | 990 +++++++++++++ CapMachine.Wpf/Views/LINConfigView.xaml.cs | 28 + CapMachine.Wpf/Views/MonitorView.xaml | 50 +- CapMachine.Wpf/Views/ProConfigView.xaml | 51 +- CapMachine.Wpf/Views/SplashScreenView.xaml | 64 + CapMachine.Wpf/Views/SplashScreenView.xaml.cs | 32 + 53 files changed, 5118 insertions(+), 131 deletions(-) create mode 100644 CapMachine.Model/CANLIN/LINConfigExd.cs create mode 100644 CapMachine.Wpf/Assets/Images/Logo.png create mode 100644 CapMachine.Wpf/Dtos/LINConfigExdDto.cs create mode 100644 CapMachine.Wpf/LinDrive/LDFParser.cs create mode 100644 CapMachine.Wpf/LinDrive/LinCmdData.cs create mode 100644 CapMachine.Wpf/LinDrive/LinLdfModel.cs create mode 100644 CapMachine.Wpf/LinDrive/ToomossLin.cs create mode 100644 CapMachine.Wpf/LinDrive/USB2LIN_EX.cs create mode 100644 CapMachine.Wpf/LinDrive/USB_DEVICE.cs create mode 100644 CapMachine.Wpf/MapperProfile/LINConfigExdProfile.cs create mode 100644 CapMachine.Wpf/Models/CanLinRunStateModel.cs create mode 100644 CapMachine.Wpf/Models/SysExdInfo.cs create mode 100644 CapMachine.Wpf/Models/Tag/QuickTag.cs create mode 100644 CapMachine.Wpf/Services/AppStartService.cs create mode 100644 CapMachine.Wpf/Services/ApplicationContext.cs create mode 100644 CapMachine.Wpf/Services/DialogExtensions.cs create mode 100644 CapMachine.Wpf/Services/DialogHostService.cs create mode 100644 CapMachine.Wpf/Services/IAppStartService.cs create mode 100644 CapMachine.Wpf/Services/IAppTaskBar.cs create mode 100644 CapMachine.Wpf/Services/IApplicationContext.cs create mode 100644 CapMachine.Wpf/Services/IHostDialogAware.cs create mode 100644 CapMachine.Wpf/Services/IHostDialogService.cs create mode 100644 CapMachine.Wpf/Services/LinDriveService.cs create mode 100644 CapMachine.Wpf/ViewModels/HostDialogViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/LinConfigViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/SplashScreenViewModel.cs create mode 100644 CapMachine.Wpf/ViewModels/TaskBarViewModel.cs create mode 100644 CapMachine.Wpf/Views/LINConfigView.xaml create mode 100644 CapMachine.Wpf/Views/LINConfigView.xaml.cs create mode 100644 CapMachine.Wpf/Views/SplashScreenView.xaml create mode 100644 CapMachine.Wpf/Views/SplashScreenView.xaml.cs diff --git a/CapMachine.Core/DialogViewModel.cs b/CapMachine.Core/DialogViewModel.cs index df39e3a..0b1594f 100644 --- a/CapMachine.Core/DialogViewModel.cs +++ b/CapMachine.Core/DialogViewModel.cs @@ -13,7 +13,7 @@ namespace CapMachine.Core /// public class DialogViewModel : BindableBase, IDialogAware { - public string Title { get; set; } + public string? Title { get; set; } public event Action? RequestClose; @@ -40,9 +40,22 @@ namespace CapMachine.Core /// public void OnDialogClosed() { - + OnDialogClosed(ButtonResult.OK); } + public void OnDialogClosed(ButtonResult result) + { + RequestClose?.Invoke(new DialogResult(result)); + } + + public void OnDialogClosed(IDialogResult dialogResult) + { + RequestClose?.Invoke(dialogResult); + } + + //public void OnDialogClosed() => OnDialogClosed(ButtonResult.OK); + + /// /// 打开时触发 /// @@ -51,5 +64,31 @@ namespace CapMachine.Core { } + + public bool IsNotBusy => !IsBusy; + private bool isBusy; + public bool IsBusy + { + get => isBusy; + set + { + isBusy = value; + RaisePropertyChanged(); + RaisePropertyChanged(nameof(IsNotBusy)); + } + } + + public virtual async Task SetBusyAsync(Func func, string loadingMessage = null) + { + IsBusy = true; + try + { + await func(); + } + finally + { + IsBusy = false; + } + } } } diff --git a/CapMachine.Model/CANLIN/CanLinConfigPro.cs b/CapMachine.Model/CANLIN/CanLinConfigPro.cs index 882cdc0..249ecb8 100644 --- a/CapMachine.Model/CANLIN/CanLinConfigPro.cs +++ b/CapMachine.Model/CANLIN/CanLinConfigPro.cs @@ -46,11 +46,18 @@ namespace CapMachine.Model.CANLIN /// - /// ///////////////////////////////////////////导航属性 一对一/////////////////////////////////////////////////////// + /// ///////////////////////////////////////////导航属性 CAN 一对一/////////////////////////////////////////////////////// /// - public long CANConfigExdId { get; set; } // 外键字段,必要 public CANConfigExd CANConfigExd { get; set; } + + + + /// + /// ///////////////////////////////////////////导航属性 LIN 一对一/////////////////////////////////////////////////////// + /// + public long LINConfigExdId { get; set; } // 外键字段,必要 + public LINConfigExd LINConfigExd { get; set; } } } diff --git a/CapMachine.Model/CANLIN/CanLinEmun.cs b/CapMachine.Model/CANLIN/CanLinEmun.cs index 5613239..42802ed 100644 --- a/CapMachine.Model/CANLIN/CanLinEmun.cs +++ b/CapMachine.Model/CANLIN/CanLinEmun.cs @@ -6,11 +6,6 @@ using System.Threading.Tasks; namespace CapMachine.Model.CANLIN { - public class CanLinEnum - { - - } - /// /// CANLIN的枚举 /// diff --git a/CapMachine.Model/CANLIN/LINConfigExd.cs b/CapMachine.Model/CANLIN/LINConfigExd.cs new file mode 100644 index 0000000..f681e0e --- /dev/null +++ b/CapMachine.Model/CANLIN/LINConfigExd.cs @@ -0,0 +1,35 @@ +using FreeSql.DataAnnotations; + +namespace CapMachine.Model.CANLIN +{ + /// + /// LIN配置拓展数据 + /// + [Table(Name = "LINConfigExd")] + public class LINConfigExd + { + /// + /// 主键 + /// + [Column(IsPrimary = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 波特率 + /// + [Column(Name = "BaudRate")] + public int BaudRate { get; set; } + + /// + /// 周期 + /// + [Column(Name = "Cycle")] + public int Cycle { get; set; } + + /// + /// Ldf 文件路径 + /// + [Column(Name = "LdfPath", IsNullable = false, StringLength = 500)] + public string? LdfPath { get; set; } + } +} diff --git a/CapMachine.Shared/Controls/Meter.xaml b/CapMachine.Shared/Controls/Meter.xaml index a29f0e4..67fe2c8 100644 --- a/CapMachine.Shared/Controls/Meter.xaml +++ b/CapMachine.Shared/Controls/Meter.xaml @@ -111,16 +111,29 @@ Text="{Binding ElementName=MeterInstance, Path=AutoStateMsg}" Command="{Binding ElementName=MeterInstance, Path=AutoHandCommand}" CommandParameter="{Binding ElementName=MeterInstance}" - 把整个控件作为参数传递进去 + 把整个控件作为参数传递进去 Text="{Binding ElementName=MeterInstance, Path=HandValueMVParameter}" --> + Visibility="{Binding ElementName=MeterInstance, Path=IsHandValueShow}"> + + + + + Visibility="{Binding ElementName=MeterInstance, Path=IsHandValueShow}"> + + + + /// 手动设置的是值是否显示 /// @@ -275,6 +275,42 @@ namespace CapMachine.Shared.Controls public static readonly DependencyProperty HandValueSVParameterProperty = DependencyProperty.Register("HandValueSVParameter", typeof(object), typeof(Meter), new PropertyMetadata(0)); + /// + /// 手自给值 临时输入用参数 SV + /// + public object HandValueTempSVParameter + { + get + { + return (object)base.GetValue(Meter.HandValueTempSVParameterProperty); + } + set + { + base.SetValue(Meter.HandValueTempSVParameterProperty, value); + } + } + public static readonly DependencyProperty HandValueTempSVParameterProperty = DependencyProperty.Register("HandValueTempSVParameter", typeof(object), typeof(Meter), new PropertyMetadata(0)); + + + + /// + /// 手自给值 临时输入用参数 MV + /// + public object HandValueTempMVParameter + { + get + { + return (object)base.GetValue(Meter.HandValueTempMVParameterProperty); + } + set + { + base.SetValue(Meter.HandValueTempMVParameterProperty, value); + } + } + public static readonly DependencyProperty HandValueTempMVParameterProperty = DependencyProperty.Register("HandValueTempMVParameter", typeof(object), typeof(Meter), new PropertyMetadata(0)); + + + /// /// 手动给值回车检测 /// @@ -291,7 +327,7 @@ namespace CapMachine.Shared.Controls if (double.TryParse(HandValueMV.Text, out double Result)) { //把整个控件打包发送过去,无法访问Textbox的值,那么直接传送模型的数据给ViewModel - HandValueCommand.Execute(new MeterChannelValue() { Name = MeterName, Value = Result,Type="MV" }); + HandValueCommand.Execute(new MeterChannelValue() { Name = MeterName, Value = Result, Type = "MV" }); } } @@ -309,6 +345,7 @@ namespace CapMachine.Shared.Controls { if (HandValueCommand != null && HandValueCommand.CanExecute(HandValueSVParameter)) { + //HandValueTempSVParameter = HandValueSVParameter; //HandValueParameter 此时无法更新到最新的值(旧值),可能因为RaisePropertyChanged在ViewModel上,不受这边的控制了,所以直接取控件的数据 //HandValueParameter 没有使用,直接取控件的值,HandValueParameter作为初始值使用 if (double.TryParse(HandValueSV.Text, out double Result)) @@ -316,8 +353,9 @@ namespace CapMachine.Shared.Controls //把整个控件打包发送过去,无法访问Textbox的值,那么直接传送模型的数据给ViewModel HandValueCommand.Execute(new MeterChannelValue() { Name = MeterName, Value = Result, Type = "SV" }); } - } + + } } } diff --git a/CapMachine.Wpf/App.xaml b/CapMachine.Wpf/App.xaml index d791b16..6d4a68e 100644 --- a/CapMachine.Wpf/App.xaml +++ b/CapMachine.Wpf/App.xaml @@ -2,9 +2,11 @@ x:Class="CapMachine.Wpf.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" + xmlns:bar="http://www.hardcodet.net/taskbar" xmlns:local="clr-namespace:CapMachine.Wpf" xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes" - xmlns:prism="http://prismlibrary.com/"> + xmlns:prism="http://prismlibrary.com/" + xmlns:viewmodels="clr-namespace:CapMachine.Wpf.ViewModels"> @@ -20,6 +22,28 @@ + + + diff --git a/CapMachine.Wpf/App.xaml.cs b/CapMachine.Wpf/App.xaml.cs index 6150690..e476066 100644 --- a/CapMachine.Wpf/App.xaml.cs +++ b/CapMachine.Wpf/App.xaml.cs @@ -8,6 +8,7 @@ using CapMachine.Wpf.ViewModels; using CapMachine.Wpf.Views; using FreeSql; using FreeSql.Internal; +using Hardcodet.Wpf.TaskbarNotification; using Prism.DryIoc; using Prism.Ioc; using Prism.Regions; @@ -24,6 +25,8 @@ namespace CapMachine.Wpf /// public partial class App : PrismApplication { + private TaskbarIcon taskBar; + /// /// 日志服务 /// @@ -38,7 +41,7 @@ namespace CapMachine.Wpf //24.2.7 //Syncfusion.SfSkinManager.SfSkinManager.ApplyStylesOnApplication = true; Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MzEyMzM3NkAzMjM0MmUzMDJlMzBHdjVKNUNpNWZxYXQwR05ZbVYvUEtzbGxXMnVxRjYvRGtLSlZUOGpjQW44PQ=="); - + //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN"); // 授权 a717c797-59e3-48de-b6b4-574a4e03dc79 @@ -89,19 +92,26 @@ namespace CapMachine.Wpf { ////注册日志服务 containerRegistry.RegisterSingleton(); + + //注册基础的服务 + //containerRegistry.RegisterSingleton(); + //containerRegistry.RegisterSingleton(); + //containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - containerRegistry.RegisterSingleton(); ////注册设备服务 //containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); + containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); + + containerRegistry.RegisterSingleton(); - //注册AutoMapper 将IAutoMapperProvider注入IOC容器,并对外提供IMapper注入类型。 containerRegistry.RegisterSingleton(); @@ -145,7 +155,9 @@ namespace CapMachine.Wpf containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); containerRegistry.RegisterForNavigation(); - + containerRegistry.RegisterForNavigation(); + + //注册Dialog视图时绑定VM containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); @@ -162,7 +174,9 @@ namespace CapMachine.Wpf containerRegistry.RegisterDialog(); containerRegistry.RegisterDialog(); - + containerRegistry.RegisterDialog(); + + //注册AutoMapper //containerRegistry.RegisterSingleton(); //containerRegistry.Register(typeof(IMapper), GetMapper); @@ -191,6 +205,15 @@ namespace CapMachine.Wpf /// protected override void OnInitialized() { + + //初始加载资源的窗口 *******起始弹窗******** + //var appStart = ContainerLocator.Container.Resolve(); + //appStart.CreateShell(); + + + + //#region 初版 + //Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN"); //从容器中获取MainView的实例对象 @@ -222,8 +245,7 @@ namespace CapMachine.Wpf //先加载服务,防止在ViewModel中使用时速度慢 var appVersionService = ContainerLocator.Container.Resolve(); - //var appVersionService1 = ContainerLocator.Container.Resolve(); - //var appVersionService2 = ContainerLocator.Container.Resolve(); + var appVersionService2 = ContainerLocator.Container.Resolve(); var appVersionService12 = ContainerLocator.Container.Resolve(); var appVersionService3 = ContainerLocator.Container.Resolve(); var appVersionService4 = ContainerLocator.Container.Resolve(); @@ -235,15 +257,21 @@ namespace CapMachine.Wpf var appVersionService10 = ContainerLocator.Container.Resolve(); var appVersionService11 = ContainerLocator.Container.Resolve(); var appVersionService15 = ContainerLocator.Container.Resolve(); - - + + //给当前的全局异常捕捉服务使用 LogService = ContainerLocator.Container.Resolve(); LogService.Error("ex.ToString()"); base.OnInitialized(); + //#endregion + //*******起始弹窗 * ******* + //LogService = ContainerLocator.Container.Resolve(); + //LogService.Error("Start-->"); + + //base.OnInitialized(); } #region 全局异常捕捉 @@ -258,9 +286,11 @@ namespace CapMachine.Wpf AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } + void App_Exit(object sender, ExitEventArgs e) { //程序退出时需要处理的业务 + LogService.Error("程序退出"); } @@ -370,8 +400,26 @@ namespace CapMachine.Wpf } + + #endregion + + ///// + ///// *******起始弹窗******** + ///// + //public void Initialization() + //{ + // taskBar = (TaskbarIcon)FindResource("taskBar"); + + //} + ///// + ///// *******起始弹窗******** + ///// + //public void Dispose() + //{ + // taskBar?.Dispose(); + //} } } diff --git a/CapMachine.Wpf/Assets/Images/Logo.png b/CapMachine.Wpf/Assets/Images/Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b3459b125ce7eba6cb90ec619b62fe52bd8d9cdc GIT binary patch literal 261121 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�v6Lrtw9oB#F^v&1j=ndATa*U@yGi?gW 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 z z2HZl29{u?r*Cc{R zXCh;G!*JZB9kc@MJN4gcg+lc@l>Q<~-Z$Wneq*=kja96u$R-SJzR~mfo+BO!CzCku zNsq#JVtW=t{q^^=<97(Q?BbeGZ#}crR_alt;lYv z{Eb=E^xW@NBR^GS$I70{bs4N(p3APNxo2G($vARbd|ddfwRBRa!&Rrm*N97BhdQ>a z*sJIbyR98ZqUfblH(SfOis;QpO6jvBSrz84S%K%Twe7oMQY$YnJ9DTGR=Bs!eg1pM z_Qn*eOzksP`26u_)E<-`gH&}*j-PZksS}v`GvWULr=2bE#nO(USNT>Z6PP-; z)4vWmC#88qta-V%GR=XOv!7Kg`NK9c)vA%UuP8zaRL|%qj877t7;L>w%Dofnt?Mde zezfH)o=58EP3{)lyPi5()SS6>qI%x-Hg@S|f3s$uo@P6R6)jCdY&YwsS*gq!Vdvhe z%a==4TZ?^BtO85{Ki~1gg4vg9u0v2l!0ceACVx<4^8D}$fVpR)5>1Dtd&&9JH}vZ? z<^1*2?AMvHHg?LFN=xQf&N({wbjum5EnesyOVl@u24S+*(B16!N+*(+X)YG(x@x+2 z5*%gJC;}hdYVjN555%5fw`SiFU3BX=Uvpia)|(xpGj*$}+1sjlhSz0HL)D41+pk&X z`F*)i+S6B2QB<3KHA_^2q4%E*`L3->K~GQWoJv%6j^E3fKcDB09-h?>>iozb>xKQq zS?8hH>AfCBUA)HI?kL&PPai%ydIOT_I&aXA8a^z#C)2xqWy0e@kh)FcGprpp$#ho> zwL+@ywe)#gCubWqj+(ONR;5*3Dw&}}^_2=QRIS$(Rfmpc`%iw-oadLXc}qBbp?)~? zW>w6#y6YZe%Q=t5pI-0Tdj9}qxzo8vafTrl_Q=r*Xy~ zX~veMn8Z4NQa*mF2OK>=tb$TNj@qJUj{g83KhFo9I{6>9ZbfP4G2V#wj~Ko#EFCYe z=#7iTCy4teMeey$uOeLfLul)FQ!TwOxnz3!yPbW0O|Qrld7Yf8S(PhmuUCrNyt`3p za?w*)cDd9&Mz^c#mhQJjyj*y#@ZW39mOl>OCcHv)63d*OVf^7|=*L<*kN;1mCBGwPOC2Tk+G zH3aBX9^{iB{5R>06q91_)`uwtnr-R#6#k&`JK|Q<#fqBQ;uEeG+H9@UYu`q4%{>QJ zv-KMpccb~0#k-jLQ(|hK{M&Ypn`Q@Gam(ICx2B&f-CSDNUu%6zQ9XEt@gdfq6@5v6 ztG#^ALq2s5r!M6@rv7370GG0^SJ#*FK3|~9*OP`FTBbG7p2atN@}kkU;}@_Lv4tD1jc+?T@L?v(KklT8qM^x%!(elA`HW z)oo2f^%Si<<6)N6w6DxtMP+g$LP|)Pow0!&PoXOMh%IpN4ajVZ)e?}DD~hNHA;Ed( zAU@3a$hGSyfGSE}o6u&Sq4eYS&OyCpOt)IyzV(+bRoQ;^Lv~FQv~Jeh?$+06t`twW z+s?8dr*XGSYjGOkWhWKm#E)Is>8koV$5cAFj+EBBUr}4rHoB3W4nVG`xZWSX*S}Yi zlXw|&t@`Wh?_Mh2dfc_t-Cc6v@m*Vsc)Rjea(I$~LL)8J@b1g$yu)T5S(i zDW{%FLiB{`K`KHL+;>pt8+AEq&vB$?pUPpC)1)A+kPxMql4R=Cf05g?o)s(p+EPhi zwW&}+umRdlnTGB&R!R!Et58VfQW47RLk1y%kYpPVYK-~MuYFU_xsIDQ^#?e02RY`t z8hdpW9%{{*zcJ=a$4zgtfQvm9J?iyeU2>g$rah2kH?27k&6`>kWSM?H0CKj!?hx9#o)(A2qNzh7&uihhZHsz=pL=2NI@Wk@^V z*Im-{qbhWoS3aXlRTt&Qe zFRcA=%6US^Xv_U#>b73CTkLh2YTawGbr&~U=qNJ9&a_wEGVKi&1>TyPj>U4WQLeAF zQ?!eHU0F3X6z)1o@k)IkY}Z~ar6@|Z8fMig)EfZF3X&v}0Rv+P;};jx##(Bg->e3} zNc3ocXMqxX$(^~51}qDgCiicG+U;uOz1i>J&tMw=0E|?S$~Vl!IrM|_8aZ7RWz?rRH}yUYkrpDNT=y4YH1!-Jwr-%nfI7prkz?8qhrna<0@ts zvwm96S+6c;%8%Lxqchku72eU9UpG+Tx)-l@>dI@AhU6V|Tnm*d``~rKQe4)lLtr*r zPbX=afd+eT5#O}qGPET#*vUQp_&-7M_1_u<31b%;Z?@im4MY*8wA8jkK%E{*H(wQ= zDQ&j>6rLq~K~l3#P36{n zIn<2JZFj}@iYM*WAquCq)cAqwy+s=dT1#%U%`=&`Otjj@<+j>NAw+51;K`cbWfsbU zb|tqGkYjSBkY}DEW)IgDADz02?m+6m%qk0h-pyF0x>Ka?DHgIk)F(>ysj{L}kdQ)P zlkU!J@>(42lY=(eNTm!G95j6|+8lUa(xr!qZxS9OZ{0w$^}grTOytevbiJN}W^2Az ztVT+xccqltkwug%*~u(r`fHY2bh_g1loizPw|I4aebrTur_Le#kJe1llEvDV%bD{A zTSjWj_4!`+QJ3!*3q?L=$`_SWJ#fqSg(ww*&9kNCvWHt9VjMu2aWW3+NkQBb+BaOfd0UoQsbZ4cb3RgW zYH^EloG825!q2I6PlYK;2p|+Blz>T3mN!z6lb1ecPn|2Lgc4j50W8Fg3U=EQaE<6MmYUaGXu$NEx_LvX{{RY9TS+A(ACdjW#LMrt!OS-+>edKqmeX&l zYtAyRTzSM574Ts@2s_CbLZlck;Gw**0ud88Yc+(FrBaYcLeuFwWP^!*(@8=? zbRoG!p{BM)J58W8)iOrl0ED3J0%y~{%$5QyW?yY&TW>m&h)RG8b`otdV;)g_O=GiO z9vQxp&?wfl)LAZ91=PtYK&Po4}pDNhwhK-S7jqs(U`(pDD=FuimQx>D@A1YZnMq?T(*R(i+=Q7P z)ZiVyqJQ6fM6VMcz3MJNVs&b+rG#=%{c1$>wCUbt59cqgu-0B!Ag4tOqB{}gkt5+T z>`6GWO9Z%*fZ+cC@)>eGJ!_dZUs3IUA1bZ;eQ6n^s0t>0)?R23VgjAtb0qKBLHRR< zZh%*=gQyI?rD<)dhg69&b!v%^VgTeGOw8`qwNtxQm@`AIm4?f%rS*o&kO6smLX;Gq zbj+S49q{Anjh>~P)l*c;kVQMo3(};KrCzQI#~YIXlRcvf<%=CK=D>ShnBeF^P!0?} z#(ium#cy3f29B@?G_6b&#~(yqp&)*gUsRk(q5C-WS1+m z{&GWf*E*)6(?su<9wA~%h)`17Qne3J2aX3g9Kd1b&lr)>wqXDp(;ycFhYcIZ@OpRL zI(M3A(h}ZlvnstPNh~_GAz@`RB$o_qLU|#- z$2;~L?qN>-nHXjF->9ewal%%$DO-Y~r~s>0z(fs%gT&x?_fcrrcs82Ul_piQsgfoH zC?t0rM$ycZGglA~@R(`w&VL)#)59td+O~okpY1c%1Q3Xjc?B=V`#{nL z;7>bGuIfsatLk-ci8MYX2tl>r}g zloS;R1w<179%V#rzW4|9_Mt4>*K(;PYC;@%tm+!TB*+Aq0By+;I7p;(GG|-ktXdT1 z9V(x22ZEH6v;_b`atTUy*g+kH@qnYs2@*_P$3X1yTZh9cQwAKjE*csozHKzGNzwe@ zm>zNJd%dcSOIT7_cD-7`QIH7K2Bi}OYUh~4w%I|{j+YnMsij-2)Thc_V+%D6t(8RS zPz0or%pXqO@bR^DGQCvc#paY!)g3N*Z?3iq&hQ>>#G~qCY1{)iY390Y{nO;E)!bEZ zwz(;3MdvFi5B`u>tw>RmI*9=AIf(x9no`=h&yCuD6J3LZfIpCMBO%~qk>c9ooQ&T7 z{Y0{*1-d;-I^+YS%2tw*CQKh=&lp(ff>lwNb3H=a{3VnoRmg&=1~wbO9~|HdmGi9) z<@(w{63u#4r8`WO2v*Xiq(BJ-@31}h_K=+eY`pGdsZvM=tquMuI#MJbufQLk(TjrM z9Y8)JkztZHEf%r)6(ki2(vTnn9Q*g<;|wmNIpt;d917V4Ey1`UD2?P#aXd~RPHdnf zf)6t!cH`#*uBaPS8ij{QK|kBb-r*{#e&C9@uX@ z;*kA8l`;;N4cA{CW|NJHqdtg{8v*T&Cvxj#m>h5TO#AUM@ISMKv3R8<0P=U4B!Lmf zBYEw|wle5U_mjBLt}&`10K057P)xT2j>JsWo_nUU`wk(t^t zgwwQBs07KKhJZPa>Iby$2e3HIKh(T!c7S`Ex!f8c^&cPR^bvC_1f)v~lh}OzamT#; zV^z$mq=2Nfq7QAvL639a>4S>t+8`u=2=^MflgyFacRt@3#3>n*BbbN~0NZ`f^!;SY z@)Kfg_5e#*v3vD{-#O@E=TEoBy#gJ}t^yDmDcWWUjwhJ+_m6*kX{x~Z;iI(jownQj z+ii&it7Al^K>=GBF}ai6Pp8|y(~M%$!3J6~W=McNxR1;EMgtKJ35T87^y!P7);vXs z0r!o%?|!B50R4#aN8smTH1W@V^T>cdk;Wz2o#G@8z(+p>{{Vd8{A@JlR9ljM03iJC zeX)e)wg`~fl6w!Y$^B#f@J=6=9~RTyuTD6HgMneR{MvwDvK|0{-rbLX=^OLUd}IBP z`azNT0r-E6e}7yaPFrA^^3*;f9v7BckHS(9a+AD#$RF6j@j9#-RMN)OJ{+Bo@) zGIB&Nndcx4Pdc#!kfo6T?Ziy}P%v@oEw+})mF`u`DQ!q)Z6L&ITEql{t7G{S?SQsM zY^Kze9myg#kHku+zr24Rj0$AB?`&bt{{RK{r-F~~5GDkBOptaT7|S5;2H&43XpqFo7OI8aH26hMR&E-w%mZ3WVGr9i%06qp0swvU8W8!jY%mH_@Kd1?fsbF=_qwgEU4;`Cu1GEd&kc_;sR|Ab0b0IbbHm(phIQ1 zdk1&ins3y$Ab;k|&MKkJs|Se%(7w?sM^g zR5@__9jz9ekZ2VFQvRgoCz8aoK(FNKu;dF78+Dc-{9E&_)8@9bJhG>t~u-A1;Ni< z{&Wv`M}C{-yJloewTp;#l!B%|@OR@gXG%7Nz$0L1Xt38{(TFESkr5}wP0Jh2k=QE_ zQ!TRS*H*|^X;mUhJuIMEMG6SvAU{6T(zgx&hUcEK>>$5=T7w`TTx_wV(LmYL779A&;HoIp2&n zEW(0P)O28~mR6qg?hR8SXr)rJ&TXa zf>+tnR2FMh$nFV3XREIcTM17UKpL!M9uV5z-5^ABbROz@d(IOcU`>$;pjpe}BX@@} zO(!RC8cWMRxYtR{93b<#@GLvuNUxeNC%%v&2<(rX+ zu!i21v7l@|325Y(muQ%>_25)OJcm{D-k!=zxs&BWwQtM3HkbDVwi)UXjr^651r))R z29%OYUK)I-Y_*@ca?%@txT*cL5!gdrx{ zDWn({(-5h@$wlh%!x0oZ3Bt{~rM+L7#U|UGa5_(SuPJH?==( z`n6$$xZ&4VWxBbNqqA2hDGDB^p7%4sIoJSQgFO9TxdCqG#e9t9KWsBQ)#ms0|1G2) zpLhN&s96|oe>IK3p)Z7+4ZD+gsXPl!37Bj3yHSG;mX~k#%-pbN@~x7&qU0?qFf z>A%id$!Fby#;8MZG)lCg?KIi<%&{g!l31v9e8<_zT5CbEc z1TeRI;?`i7i9uy9AghwLcdj)o&o0PYlh`uSt8I1li2R5&n~H%DZb@pV@c@-@@Jtz} z8;PTw^k||k4EGiQt6_(e^)}9v@aPQv&yJzoeI94{6E?oi*x1;7kl`8)0+5up$OF5w zse7)Ay$=;?85gv>@>0GHwX1I1ie3ihFp%m0tBh$q+`M?>SZ3qd8M~|gtj-+H=>_yy z{4{~T>uRVmB*$pbUa%1Kck$$=q1_haGw|~hhQ|=fNh|0S9+b!*QNdH7r;E3#4ZSq2 z?CL0jk^ag3AuGXj%K4Xko0i^>TjM2GKm}bF3B0>@4$x8EN^sT5(d*JCu8`p{A%=i% zE)NFe?kqe*E*dlnB4sDY1P#1~@hulw9|>WtjKe{^9IbSH+9y}jR?*Q$IRIJ|I<9rp zId}!jJV?6!X&}#<{19|}le@0OW4Id#P9NFZOTKQ-5gcDayfq0^!7Z9z|D7rNbinqW zHYG&3@#hQmC+Mh8x2e~ON$Hi1pYPL`Dd;+1+?9O!hl=)BxnNkS=f?+N^`{;j4^M=A z6h3`v?fa`r-~aJGX0pQ)Zl07;t~X!}GbB@9vJG$~ltp{&&yqOv%_g`pFr^5kM>{$E zwsk!qyj_!*P}36cE|qwM#KflghSJ>EI_l96b4+#r0a%cA@2Syz{GMUg-~SyIzyP6X zeEjTck>o8(a@KSsw0B^0{HbXp z-nBlD%ms>@zOKI~Agm@LFUj_Q&JRv_<%dd3$x{P8Aom5X-*SC`Cj4fviBq- z-Mw~MI`4bBQtA;eV!X$-cOn&IGsxGw7xfiyf(`9^DG^bt$RL%YroC2o{jb4yM~+lm zh`{<8!$~DcwA=%BY&|dO9p@>bA7!E`B3JKMm6TDfwzex4OURA%oYN$6w38#=iJYoH zXT5%XcZ~r*1V&H(1;%FX4HD*Ej1oz1P9b8U+CwEj(8}qDTq{2Bdd|JPi9JuZ%+-@z zdgvmKNcsX-KY^FU7J7xAEExGT>cq z&2rP4$+vYW$tcx1H3C3a(OC`r*K^E!Vu>@?-&CJ_3tewE{f_804FbmaRY>%XFYOJ~ z#(Zk{Y}`#FH3-#k!_~ziRM8OBX;Ds&zw{^oXLmy> z61g;x#Bh?%q&Wiad-Es-C=*)q2Z>gFU@GwY&~B31AkP?~1s|`ZJ?YJgnK@GkCe zi)2-q7{%P0i1l`!pB0cSvSpY}=JoiDxUZ!-GeSd{pGLCx_MS=XER=^*xqt+TpajJV zpcGw7Tdd{H-!%C3I@orb=DEIty!E%is_JUY80%F~RsDjd8|#3l@I8^#51X!vwJ#!x z!?bAnMY{e25T3q0DY^5TS&9=&ILRU^|AIq*#fhvIYk$Nu@$pg1Fyghz@swkYV|8(1 z^%LZTUaheBm!W4EAr~M8C83^LiYAT`CZ_5ItkNy2O@pJBdeO3n1V=64+1(PC%tkACh$$Bx9^_=+S}B zt}~?0=Z@q&CiGqNxD&Zmc3Pfv+oxn|zJyhbH8-cAEb}cMw{F25AA% ze*tU#k*oBQt~wx60aVxx_TK7e-% zimhwB>V?MLd_BDAjJBgGz{12qfb2NhlWu~-#%F!_u3@zY0{JJGMWra(2ARdH22b6z zVc3gvf-tK2+&j0WNPRJ-8t_O!aI{i0aQBC6{*{|;^@n+97c>^zfACm*1?iuOxhl8M zBvTCH>_30&)LxFxosNGVQ&x^MG=gx80HgU(wD{Yn31RL-=OdW~qYmZlmAFphCo(N2 zm~WivlPuf$oTezR0<+8+<&+`4~P+7o6}8mkD+~ssLxT6I;7gN8xjsy0wX5b=hdMeL%F$Iu=t5}iKjE(VEPOj*Xafd zPJkM@&)8*;@%BV$qu~6m5?}FAH{D~ZcHc#=-xlLn+iTESkvCoWhM$lob(roYuvVG+ zDb3qBKD{d)fzCHM-i=CeB0s%aRqK)K(v+?uj1(kDihn~+h%$=@p8W7Hqa~NxZ*{Y` z>W7;}6r%UeUOoI{I<9LkBN)PPp`j+{|MN}Xu(|tX{bGpD>SKYyCYfe#u=BKLk|eQp z9wS^(ZIgY@Y?2U7%{|*+Y{NwNZB6|>4=eqF#z|B7An|2A`4-KRc~9CQSbiiYQy)W{ zc;?^~R{FkzH;_Oz6o>7z4Bn3(2(-*1Qif6R;rYyoB9~TL4R|Uzaj=$%x3HRp zUhn%s_O2&TJ6b5DV2>@g{UX=*>(11LM~(pZ+i|U+V)@HAhUoG)?_X%y8{{RvSZ769 z#vigyY&2Sh$ZrmQFC_L?IyU!*@~VS#YK28q>A^7!;6z26j}wJMtx`CQhmOWJ8mo~_ zS!S-mLdnRiUd*4bl#rlbU_AZu0L4gc8u{VYI(OcXF*t)iTKPFcY<-5s9ivI+j3mk` zLB&eMh=`M~fh|xQPw)LsOtPm_@i=B-f79DJ#@c;#^X$M>*}XmdTNAQ6_p6g_dv2nM z&is$cNi0AkdzlF;Xe&<`4tLG%)Ia`c;e(?UYl1$yU(M+ujDCr^r3auQ0VM5<@Q1| zH&t?KJQDpB=G->XrEyyupn@BIdycm;cPX4?K^oHKBe5`dgtVX*NwvI0l(xZ0b1TQ! z+i3??-}|v5b<>u=^a~;@AHMU?>QNVvg4iN{E8KlE?RVdOB*^r5(cm5(N6`M+5-}HH z(ZZR?oui|bRX=xpMU{=aRnC9AwW8hb-Uf@qe(|E8ikV}+)XT1UVXn}k~J11C(aYb?R*O$Ytv{Iq1a(fKc#L*VUu`-ydL8v(l+(#dhU!XdnRNyseW}dtJ zq;y(UFR$2VDF@mF;fhYl_?mLY1lWAsH5H|$zX!Dym(?cA{D`fT({*2uu8x>e|a`e&Uz&Hd~a3qx2E1*0sm z=o?x-RCew5y@NFBsVKBYcpudfn|)c=*3!(2aF1E94`BqM2Fa6?wuRzyEz8@VS0ndW z_GDQevIQ2_1*EB95!u+-@PEw@4&(SJ^<3HB8&J02|0H<25^Fk>-!g52t1yC^bJuFZ zLD!$3noBpWmLyhs<1#R*4HTs6k@*d`dP-8QIfk@+07w!^b~NJEamErlgZebojjHBN z?U1r#<%dKEL``798YF|uxel(*r+*bBWbI?C!ZTj-J8yHypniKBX`e`e2JeBrPB-lm zA5AGBME(OXuos^W>g_}BWz81`{k8SHP?ADBp5)9}dQ1hiFo~1|Unn*8i@KI) zRbmBDm!5JxiXXxH$MQm-!Y>4g5tl^_TioXa6D5^G2mL)3Ni49?DGXYajkJr1IXZ;( z-r-TXO~7hpKwg)qOi|v*pTXw}CbP*9$=b3>VrnL!n&MWp)0458j3z5Y zz_#Poh^typ3{zTv0q*34?4ioB;-o`iGUZLP|4SBMl2UFa*mLaF=$qmAlc> zWgEYh>T1rq(hR}&6lsR#wB`RDm%I5M7vQmm{$Nr%gb`4yM1${c$S>N`&On16R3tcN zj#KZwFvO(Hh{v2T$nU#%bz^EVH3yMfYmBl7z2{ef3$mY6Rgp!4k2D^h=R0HtzX*X7{S~sC1vX(F6!g;KJ?feeRZ63p#mh7VEGXdR1BXAUVvEAi}Ov-CN{d z9_hrPdnk|Kg0F@T2z>Gf8>Mt>;{zO)BOEUSX~$2clcA6&#TlS(qM15N8iK z+ODlAnng4;p1d{fgYVUk2cCJ`V&MK~8&am2v@!_{0s&hiPP~g}gq5Hp^gKV5;Fy8i z#mC6dVgL{4N(0-@XqT%7jfL){(8zVq6CrDLK5Mpo2JW#txT|>$4YgWlJ%VUZkx_nH z_36bM&j2EUx=62Cmv|nhLt3Th2d35wA*HIR<8(F+klT`Pt6{a9o=E*lN)6bYh&p-5 zjkqdOMTfYp>S{u}PS^xtufN>aS9H#qzu3Om>Mn=t_@dp=R5+;yj=@2Wb|H7?3B{{* z_%cUkr6|!jIc`gRV-w>{wNs*8{e^v$b*kX8)}b0c{C0(Z_3{uiW?kmb_{?3$wo19Q zzo@c!h2m?N#8mPl0fCP()|DBRYKs2>w#H$bHoNxMq_dti#>5PN`yN;#K2Hz}Er2#> zyhDV-#%Pwfd`l?kNHpVX5!RWIhP2dB&QH3i^GD-x-+mhYR36BOybLN?{wL8SiZj_d z;Y4{z@-NPY-nPX|b{SSqL8}SV>aXAb$nd;7`jV7ZA+v%cMG;$T^nYoemy((dIfy4! z;g7i3k&vx>o9X7oqd576Zeo|wh@pWhL-q07(|(`70a5L{g6hD`9>UKJJ7R{uNQ;dn z6yniYU{}JKgG~VQ|6Wl)7!MFEil4*zwz1|Tik^y2W`YFyfLgSmg4M>J%F#qAdaE9q zOO7AuDu?rj4}yD{$B$$SGj$%j4Wqsbjn!3YzLP{lWTFKFC0QEw=mVAUW@-YgEfmCz zv9L6QrklW7<;XtQk>BgLZv$An*G#I>nTs9cq@t#gvpu3DhzQo}K*0cpzKUV$x91j6 z4Ot{Tar*75RAtCQ;7#|dCy!=&VpbN}anC2IBX#4|(8{3Ho?lBUxL9Ob9%eHng_43p{kX5gLjMC0B|qOPF{FLG^Hn6(AWQdI1$*%J zIJ4;=Ehen-e#Cu6%TX1Fa-WL16Od*qZ=a}PbPj}lCa9oT)$###m=v0Jjdk{)dDg3& zx~OF$Y-+qcqnGR9M=Ec)GyDK!@E-uB+IG;*v@l#N>LA;`={3>=NbmQM>BKy({rV-j8q%Em=g|0NStec<)di1(0oOntyL{};S}`m!F{uz|8h>-rIf zSp%Dcd?B~Ny0{@{L!_p8EMvaGCii~;P$#pPz;a z^u`r}##d}>G=Fc~1jyLmET6ObUfqi7*VP1iU!J~JrrMTF99MVG#*lC*<`QY$?qJ%u;pYnQTMbs8^ed;Nk${6Nab`7zzw~SD8*)b~e2@2OtPwC47CRD-$d`3tvlhvY){co~ILm3+)0@2S9Zm;CD|!x(PNGgx20CpEjQQJ9q0eVk=>1 z8fkTvAz-a=wZBRI(KTDixeM)2;ZFc0V@uyRWL6m|jkfQD&7!^@tOmP^O`1i<&r)C8 zqPegz6--7bJN|fY?wZR@B&SD*6yk0V8F0bp$265J$32>!5Kcwt@%U1Q9;>ErNu=mc zBDcv$^s@l;r9!_Y@H?#&Y+ULY=R!9@>;fqlkIBHj5PSBClEcysL=Tc$u(fl)d7(qhb3RFb%6_<;wNBkd{IiD&q zM=nG!6H0rS9({!6eZFgbq(LFTXdJSya~VHz#@TnX8pgq+szWAuqLZWWVk+Vy@1wx( z#aApO}pMKcbxzdb&MX;hb9_9?6z>k+4XaH28rAOe9wX2+If?ZUpy9dSf(4Lea6-qq zqdJ@>0Ny|!eSTUV3bXOG16zIndV9tveG~bB$L-Bq0RL>hE zicsT610zF}`(GzcmLQ|R6i@&l_%HAC>x{^d6dC90nG-YL!Y#8u0T^iBA`6Y2m3X!$ zE~??6wtprRC9W>W7|~bPqquLQB%Im;)FDY-+a*iy{On0Ha4KENo;b5Y9#<;co@C`) zQ2S=G zcD|^2ovTlrbmiYD7jKtX@VybDn``%-Rwu<#0Yw*n^=(MD5KaDB+M`ZaUQKz*~iCyTM_ z-+^Qc;ff!O2}mMDF=Fs3*hLQ>|2&iyL-u2N(LbAka~Fcv^Xa)-(Yc6etKJD1Ji9NZ zk7Gw9#if64YD+NH|3C&40ag&r&{Q(4Pi9x)h&0p~vu=eqZ5mX5s;vFpUzS@cB_7E3 z8@QDFu-=qP6nuQqcURigb0LFG_qST)hIwP7%b_dC7$*X)Xi!MM}=`c4`ZmkVa~bbG@0&l4J>&qVJ08fR>u zSL|~sUi;3!b$YeDm{;`%p&9F5hAC2gbMonMF74XRYKT;9&y!87=k%NDp`0O!O{?<1 zhNI@Tae77oNR5ooUS}eSt0aV=Ew?8FM-gHAE&QhH2y2V2r`{d-7kS&?)pAz48T)s6W&7=gB37mlQg3`s5GACp z(An%YrY3&%H3Z^V0|`~GWS6KRccdSD?~~nCidiLsL!&O+I)h~`{YhSLS`S0pl2=oB zO&?I;88|IP%#mjCfgN74h%A$QEyJ|a)g))ULHVvdDYtntxibiGH>kwpTc2NDB`vD0 zSpZV?on$jf<>Yb?WyUrKHnZlX{rf3wplJ-@>c4wbU zE&W}B=MDQFrzhDI{A zq4Mi93Z_(W>4|4F2@@&y*%hLhjlsS;HEkI_Dhln$v9XJ} zulv?V7&(bjgF?h>tkA z0w(1BFpp8^b~~))uT%VVhAEmpPPjHYf-&*0kj>VOcRTm@xU4kLyY~rmT}1 z#L=&GtTO_+wgvfvm4a5BuF%}tfOr#4p($+K?X$(Q0w+2m>hq$r!A|>ZnjZTcEIZfLQFDH@=qwT0j_C}PQMT! zoow8iz!!6R@Za{^jDle*`Bx>&(exi~^?cd1@6O+zR;Fn6(oWRc6mPDXT%fF~qd}h7 zE=xKj%KnapSUD8DyEFz5o=QD?4jZ_5Aul#PVeLsc(^l%Ze_^YDx5+gEQMO~R)g|@6ZzUJ3VC2ZW*%sTt+w;{6+Xs298Rg9A z2oPe{%UVaW02sO}zZk-%S23E$s*ao-LV}1?jJ0^erifMVX?G_Cyw9u7{Um)RWabWq z12Az~k@hrNedp<4z9}dEK6kmF@Zc9Wn8i>+5=H7GX*(U$- zQ{>e!wf~-Lelzr7h@B|!2g%S_*?`GJU0L(BFWZug2SkP&wWs_PC z2%W2t38kLv-l!b;o8WXWe6Pf`#<1N2M|0UZZ}7yg#qtlQ#pnl3R7o4OPsT>qI+G*u zMx`zZSkUM4?x?qDH}5)!)B_#8HY#9|D$u8LCav)!rV`o2EuaO0Kn@leG!|FfB&OTe zIj;s5IEASU@~fu66ac?Z5fLfWo;e1;exasO!U=c%JFNL&rfb4b;K-pySIb{dB>L;H z#Ou7wMFR#Vgk{Fpegkc{#+XaC8ky#>Qr7eF7{B2=@vLpr>(brWJR#_S zyn$BzZ4Dz6?~fLyl!#1Yz2gZ^w)>DwCUDO#jQdEh`>6=Blnoe#Wu%=SGWf&qar6$S z?u5*y8_H?>r=g|2Li?{*A^`-aYkTd|eso?7XA=ry@)}dB3kn$^AYyi;Q>&Gl3;sOo zLUts_KlSD3fSg7x%b zj*@9xtafVi$nFQu=17=nuiSNTL1uL@Q)XaB>O?rT5*O_{@v_`Mqp2M6#i`!^`zRi@*UQv;!pcO+!KpOLUy6Rpwo;*^q_$!}?_6H8> z<71T07wy>WKcvuf>Ws>i5?jU1!ghc8oS37wYKUgz!w@8f^h`=yiba~?bAhuGw(P{& zd4gU5Q;>l>=Hm0`hhJRWZAS$`$A8(daC@J=%dCmX) z6-zy-VCIh*pHXMTXPpCLO4zUd6EMW9Pm_-N7k=MiTg>loXx3R$Su;v5avA6r)|0OW zj{i)2eitXzmd|KWA1jsNRh`wP5Xq>1HWad$Ds>{1qRm5bkJNE)WDAab-TZb6;@*lR zb_%{>S}X>8C0u%V5fFZymp?|V+5Q6@IUgi9a+QU6zLnqT{P5Pe<=XRkJN5^XIO}Qh z+cG~=5p@kLL8?p++qHV@VLpkNtkQ~n_fJ@mxPn>Po)iF#i856iKK(X2uQ{?(Kvj#g zitfv^LZ&5~BX}MHK_pH*K04#n?H65=x+ntY0W^-%^eIF9=5-c=p}eX4@uBCv?5ERO z+W(+$0Ptx1@5mF{SuYw2sTjeJef#E~lrau*RXOhHSh*^&`cfLKs6{GCb@HFyI_GMf zA%ogQw0g$-2H9D@2-+LJ#8G5P=S3wp+GMQ^4Eil_k5u?pU2{8>B#CqSiBig|7veTU z0xvM%RBV$7IG;-f2|TOeEyL}Dajk?<=a&+eeGPtIJKc{oJc~)CGfy6y_DbIo((>U2 zi4oPr2t2Yha6U-wjsw@Iw0!`OvjUTD5Q_RgnMf8?_&I(*g{I}2Dr8ZHuU!x#*&I%v z{tfiAbdczEyjfTo=i?F)&<@NTIJ>$&POW9!xBk%Z3kk8#zXK#lz2Dzp$y|^WTqI4= z;U&fcJBMIy(aL)19;u>h95 zpf@K!@b695!`9n$1zM)IHIjUEl`s@Z>=V4^-Gv*JSGs>*S|-oo!iJ+Qnm@Qy>Nn)g z9#3+Gt<%snRdP;J04U~vP1eWYKX_;qKRv0{pQ^53b*eyE)ZS-4FdQyr?4oD35LURz z_BC&Pme_@U;W=9?pH|#G8q_8balGSP<=8y_Gkz9lLyN-c3mvvaVMS(o-iQoF(?kNB zO9RA?Z4SNwOLH25k^3Yw1deL=(*}iCFIy|Ys2`>Z(1LdSTu3<(%q)G~+(HD^E8^FW zt!AcuOJGLcJw9nR(-lDBgsqfY3ahc6S&+7?DN@8NNFN=T*^8%9e4zH>z^L9oZ6lWd z!Fn}gZ2UH|+Rq5_8-B0lb1w5rZa&WvzCcn!Cd+g9l1Yr!!#}%;)xtxBqz8yah?OZ6 z0b&GPVVV3bD-w}Fiq4`D{dr~KnpbDgHTrz95BbI41wEvxI&PbkU%wwEewZ^Ja!@2> z1Tq8g8qGw*gkm_k7>}Pkuann~e=WA@V{|Q%-I6RirGRSnSn3tV5lyyLWHn4?$PhC9 zQi(@J?{-Gm-?toNDu+pb>NP*mFvB<)Z?J2R0{|Y?A$y6}Z$5B`ZI|`$`LjqnQ;wTp zT-4RZQ8^l@3|n<`(*l)zrg(QhVC2Y4F#1+GRSi;wW&$k9(f$;C{)McrtGLp?_&5qR z?K{{E;vdo2*@2n|jSE^iR%-r1>fDV{isL>M+kTL&Qna??@kqw7V|mxfp*+%QHV`?m;*2Q<;dPJRAAYdZ9keDWb z6IBy8`!;rB$lc+3nCPo}l=g`mATSGaFeo~i+{?^y(TS1MNGD@rye7+QCL0h$#NtpHWI+__3ee718hsh zati7*8_>~I<(VV5EG3C{43rpnsWwuyoF|QX^7GX{ZYu@GisXW7h;XVoriB>*2Wqb| z%=o-A9Ax)NY0Rsej;GI^fa}Hgz=)tAfDa_xFKUDtX1kOp*>}-$v~JKxq$Hk2d1a|C z1MJ!>8*$Oc$RM%YNYvX-Enw=$n|@%JqxT1E93TJwFujftq7@(U?$;vep@TKeKYN3g zQbK`uRy;#`wmv=;U%?C(ZwPfc%^bTfIX(Y^F^CE9v3%7U(PgX>R2v>&zvWkn%rwkf za3KqWlEG1G=pZuwu+0`OE4rb_j*TY%U4`32_VrX^-4$ug#O0be{Zi#DMG8jpWrqOv zZ zo#q%n9pT_uQw9}*p1kp|N`k-v1UXQ9B>&Q5r&NXH=-k|a3ksu50L8dHg<|+qSao$P z2`$u(kS0My#nP8jZzCcl#I-X&K~9n&RV}6D4HGSZ3)gB57zy8BLGVYF2o^xii=b(Q zxXGgk+)E+T5(!?-qNR6JBZE<#YLVi1#)4?;*42zdYO4|cIpl`Fd3A~nk#c-6PVRDb z!D*E<&tD(vfcuPhy64vs{MQnng2M=9=x>)j$Aa?Vch15{!`$pJ7s}moEf^QTE?=&d z1}>CiF7ut$&GE++>D#=o-AaToz4xMsrQd!)dwpTy`?~&b@UTlGmqrW)ik_*7sjVPV zh%|Y>aIp|!C}r}z5L3$BG?X2kljKA6NH>QZ1aw`~6N()DbAURo*TsC4@UN^2eBXR} zNz?FC6e{sP*FqR1DKlvoLmoYf@1v<47IqWc0hGD_F*h@I1L^1F#8%xa>BDG*X7$S%eGPxq4tdwOGRA~>=T0Le*21=cr+09l{8>g8(&uG_192XbT_P}OY#wp0b?<38 znC4RKmx9BTh<`^#eVq!2Mi%Y?yT~MLUKFHs(lWoH&u!PIDNT`#H?cLXq^H*{cC!J& z^qeO%0RVCapjYfp!ZR_C_bXL(zgXldr8#^nbVUI!3QmX&$|#6NyK)r7kB!xl^xT>8 znL@53d*udfr!4&SgnHopcR!e0YYr#@>bl!gU=sSA0*Sjn8#e96_vfuj(NgHE?*SiI)gi2}d>LdZ_$dN$>p z*5TB!lL9Q%5V#1He(n^L@&G68#h9+bv;LK<^w$BjEPy{Yw_gSEvbXo_-^V)F zR3K35h9)Yh7A`6{lyHXAcu=wah4I@_cENp2!{}_vl#;=GA#ywx>S`oFg+yD!*DAwe zwXCt9ez*W1H9g?5Yo=FSo9@9owX}H%WWraTNR8Kv=#KhSb$pKQ<=LPlaXx6Gd#SR! z0I8R*k8L-D4H5^)ZD&>U+hefctTw(tDe!X4)V-QV7P)Tqb%lW?AB zuoHTi_y_VInT@12oA0a+!z;l|+K$`~XbHJ4x?H&Xc?KfFYU~70#?>{=S@(O}^mU!FaDX*O zLLRoI7mSF6Ly2YQ^shs|Ouv-fyb{Fw&FBWQ(e?KYMw$N<)RYl4Wo$N5TvJ>TfESJNANfj^8agUH{;3Q&;&EDO( zb_4M=9n^{mP3H#4Wn(;95ms&|dPMww`y*|eyFdQ}h#Q%`lcsypa55^Tx31sRL6r;x zfpMdkf~-P#O8Rl##Cse+^Z%?ha4aN1sgFj?#3e`gor63)Oce?H8e7Q5@YPUGU^;9~ke5yH8SwPLVSXq+rxelL+?h>kiKCVjzF-}P)>tIM-;C!-* zFEf?)#)L-OiI^XLOa0;k={YCF+U3lvRc^npa&x{oZJFXT5o#X~nmgLQyc}qlW8tw4 z^$aI(y-xEfCU22XMb#l$wx29>_Cz|J+@yDt&#OIq&9rT_PRq99K<;u;yrS~j8jTqV zOxin$dV+d$TuZn}&|^A?qagjob_NZJz%iCb=%94j^9%EY@vV(tb1u?GUFx4u<_a+e z-u5`Y!shpAG@M9;axyqE8kV*e?c>HSTBF)3*@bR1!3ynD%lt7PG{rp3fGcP*IyozZ zjm=c;ZfVy{hx-=9&(};DHn7_`+!vjR&8~4NA|M!+p7r9A0h zMR!$Q)~RL&TAU$j*tFH7y`8;7eKS!flQ6xS3fa~me2+zhtl{7uiEoQuW26soEE!Cj zpDMH41mH&8tp+5)isuK7KdZLIY|{^lPBE^M<*)-0Nyq>{teDy-nq)?v1m|VWdjCEr z_vt|0;}>(AdiqVDAWR#A8a7t_vr+tWYBvp$=Uz7RT5=#GBly&XlMjHT?*x3KJrkFH zrVi4msAJT_Tt=$Rd8P`r-o8DPilwY?Xf^<`L?NQ8xxj+*{0_wOc#n80_Ss_<$7*!t zRSE;^>mXe1xeff+j+uyvBp`KAk+`czTzzwug5}NzV;*rf;z!x7@UN;vYi^Z+jBr~Y zYS$NwdXW(?ax(c1E%n^tQVT-qsTZH6x&kn?%wbD(QhMo26SFYrsz&DMI1Xn=~jm61^f3seHc zKd${HM^EjI7Ux|bUpx%p&D%dOAn*(`_LdP1^j6K2L)C689yHuGlT*Gn6A=Chj0SMB z7kw-4J4)b!M6bVEE~u*<8#OlIfEhX3vX5LSdAS*O41~z4bbor*8l46A3p@VMLsMq% zsF<{tnmD5`@ZoaM;VVv>GmlmO8jaGs2~$lIJ%N~@YGgL3K6rHOBvn^Y8pDy387tXD zl9}|XUq0Qg(NeoVufLC@5un9=73LL|WOf7;C6R}ntNxzYFjs!$GyLJ1FXNuh0 z$3cF-=?QL<-hEant9S5V(NC;VOOU}mlG)>7}dS{j{;pEr($TIq{_ zwu=}1IN8i7Oh_;8PIKyWm8kA(rsSh7LCb9xfo*)D$DlFwcx?hF4k%@;-*&>O{~k@p zr|DL7-ZvH`4OOSE&Xz*1Fk-jD6p)CnP_dS8F%7V_yP>Nk$zx)}@gBwFzb*)v2yi?S z79}vK!m+n14RUri?S4PEwS(8#X7UR_7-XZ6=+cTc!m>D8eU9Y&y6o5P3}hUK>l1(J zYVJxG>)5v~8E8SkT8~saXREU$OLUfm>g%l;uk%!MjiRSdif{}2Rh^a;5QZ(93_c>c zAeD{W>~y%OW>Q8OBQlssJY?Y_2$*w`tkJ1@T)erU#*QFg&w$aiTNvTew}l-jzv_VPc#{o~ZR ziiMCCY)6-_iP-)rR_pyX<@YMB9O8GMg~GWg`SB%h z0^eqrk~F#u)4qNwz2?LIH}BGmG7a?6cxT?4_H*$0V$$se+w2K$&YtC-97@k670li9 zOY!Bdt!(kQc3xS*BUeNYikaoxbOA{)enjeDFH`FE_XIb$Nxu4?_dE_wbsprDKgn#3 zYdu4hZY`G4+U$oX_rw4rUAzArv&No6V%R@M)p&*`zp~9&X<$@l0O{%74NNm=`QmZZ z^pByU(nu}3Y)dhfur$YgozMS9(UaYDGk5;puZEUEh)lB#GLEQaz$h{_Om2~;rpVmF zUciy)Mo?nl6j6l^#N!4Zi-Js%`CeQqz z(2vHHWN_yf5BofBtqp!f1}?G$EsqIi19CpX!Tx@;1|iMt_F7FNLu=6E`O_TC9YZ-#-iGYeE5Pj zqd+{@wLH^7pWo&uaFDmWn5=#n_Bwsy=f#`O#f1+Juh$**4pYyQ0+{aq+@!9|^&5MJ z9Sf7aR=zQGnoA9<9V!@_2pjrUc|7JfoO^H3y|U}~{zI{O50tbh)<+La<8=$=N&ZBj zDEU+U2Uz>koBki*4|Tw~Kiw_tZW;S#Pu^_irOxlHl>>ScsE8uX$JI6f*c3Ng(vvc~E#E(qI=^sID(k~0%^~;(|{wsgqId$5T>>6ar(W!b$ zO#FkHTv@`L@ZYJP)#~e`)8&3`*l9R-qWn2GdHtt4T<;_`b~@PTurkny;z{M-yl2TK zwbvk{!~(fS&+5hv2dWMvoH*wK%)Q2RaQjC8gk+Nw2NE6)^4A}%4wOm%*QUi@@~-=$ zgy<3uIZ-9#KeXd&|Ei4K7_2e&ruG1=ITub|G!s%^cV%B}O)YX4Qz;lvn)A@L=T*)d z9JwtIRJL!5p)QmUU+Eg;`+EBC&^{gxDIPE~^ZXOQJyh_jId|PkZSOIugMgdZBy`BU zI_L);S3!K0-r5%(L7;5ttG>V4zSiv?n_&14FgUR+9P#hp);ah^yQ0q7<=3aVNhM_P zQ;hYJ`!W36d}CLg+4GlITBO4H00cb$Km;7LdbKj!Nx89J`C!^&Apqf#Emlh0D!{AF z%v{$NsS|eF%-lw17tAYkQ=Jj;@}Ep^D7MSG)Bm>#wDd%&GC2uq>4J=o|6&mG_dkH1 zLFyMHje`4SH}+QjSR5Ktn&IcoMP(I>>NqlNa-?1&G&;%zCG{%Akm;u6`twwO4 zUGr&f%MLPkP}gOWfz+2yby*}!YM(##JX?3s_~1^>mtU>umz&ur#_hH&aGXZve}E{i z)VC=pZsf?r0F_WT_bPg03D8Z`!QKpAX+PI8Z+#D^3%_=R;v;MNvJrL4u=Dxy7dy#C z^DHf&CWMsoiaf-`0I5Q-r5M#@`I~=-kfSI0Z0&M*Tu5t7H3V2&%@|0KVJN3JEfKJF zmVQ!80-h~#C4G&ZQL_&#WEe(*l6p=gHj?Lt>P)`7@<&x==>JQkr)%1a%%-pRg-foo zu}P#OY)A8MUJX1K8kN-SP&*aS^v=%&c(T#(*76hHh&EYe{XALu?md+%d=Oi61|0f6Y7(-rO1?=h5 zje}IVYZXnIF>z{7F5s(P7=xq!c7$m;3I=8a=#8y?_q4MPJxVyMtZeT%jzj(UUH!(M zPb2x^H^pz9`7w(6*DqHm=B37(h75hbm}0K6fMWhgJx@iZR({Y(?tM(V6W8E|HPZEIuYd{EyN`GfVh>B zyckIYZ8BpPi~j(zrTbP>s(RmFXQ^EsB|9}X+B!$mThZoKsv zKf0QLrL8~-LQIH&K5)BmsJB0?S7h52N|r%Ww#$KRkO@D9V8Z8kOr!!k@YTv)01L_1 zMOv>Pv%)QOq|?1npx|({l`N1~Ad@4x1b4z+M?|w&QA;=CwQDF!kx)~_7?Mxr+vl7` zJkKT?Ek6F0)B7l9vC5_1C7rDn^rYPC_DZ)}s;eBa-fZp!6(z>Nt6;7Og(xi=K>q+X z`$Q++xwGB%yT!$Z>0e9Ktyir`Atb3FB|eoT!3qO;2foo5pI7ddXO?NI>8oqiT}YHE zw;OV%QV>#q^pPnWjpXgV#})CJY~QjkPOyaOEL|RLQlPM;fRI3dou+;G?nWpsI*R6B z2q2bb3^&FLi~M>r^u-E#rks@ltx3|LkaiFxi5tiw4*O!o@>5zUnM~@^fF>hygqevk z%ni@H;=cM^$otJIiXjC_1kT|~RDKxT2nTb&9j6v4lu{d^Y@`TMb~C=oNcQ*!CxhNF z4e^Uw8Mo`b09mo4V%82e2WoaG0RYJ)0(LMt+k?K-&*hD0fC&U`xDY}1JMWF4XOj>k zbj<$0!?(^cIG->9G3wqEzyf9jOwae*P^jtR70)jrT+=b;1fqKl^-2E#;G_GD0=ym4 zlX}h1jnnr!Cc)FeH5;a8eL+C}Uf^KO;#JbtNT_5_uAvFl#OfMO+r$LVJf3#kap2LN z^K-nU)Z3Z{Ip0~{fBFnY{{V}fpyB>~zyAO<8h!M%9B+>^RvnaBN?Xhhg=i1n)-`T* zecqCZDKR2s>HzlRe$P5R1xh+(t!ah#0Rd#EOl}BX=TMJsaM;W3r8fG45@lCP)hpRV zDF~D8vH>>3yIfNN*E*>au zE(wZOs}AF0Qh>aD9QBM*|w?8mPaAfc8hbM;yRZ*DVcTUZz zL=91>m7S(Lar1`#Lej@etVv0oVxiIqiS-y0zVqK>1AcJx@V!sw-D;Gj!IetAhOJxf z0D!M~+IEP*GIB()xBARTyxtw4)e_v%A++c{;|>1VHpFVv?>EI;3`tV-!sxK}DvuYSxwMN|b^(l#p}t;!HoX^x9PSc=ZKnx48LNf1v*~4HLFpAbf#cPGDgRdzT0C^E*PA%Yl-`t z-l6sO-)*O%dD_=fDcyCps#2AZ@|#Z0wuGfJ3xt9I)K2^iK5}Ip!IazBvgNyT#^6%b zH7ed|cN(yw14;5m$kv_Gw=}`z7{;YeSYrK{GWDXVW{QsIR>Nkg%^@w4q361V5)w;o z1r+MiH4u<-Bdtkl)q8r`(`#aAEf!UN&Z4P{aH?t_lm%$(Jj-h&{W2UR01~! zF%BmPtLh5+Zq6^fyJ*pSy!8H`h!}vEBiXfKJ@dUKD==n0p9;%Y{Hs%Dxgj2XMS}Fj zJymPvY1FE_Td80VyCiy!nuRH`ARxpCcTMwME_Oa`bM7@-HJ9l;)djMoD1s7{`D)QK zpb(M=Zum^hm)iU56;{maT~3?hbWdC?m+eiis@VHLgwxh73rQ(T(h#N;5}hQX+tl zS+L|&aX5jwN|XtZ0Z?fgA1M*irt?<11_~-0Y`CxRDbl4cpYttiRD4N+w%g-*L}}Fl zGqC_b0Dr7+^!dk?Bg-YZFp^*^kvqrb!2X!>`3XoGw}|79pP2)3+w;dp8+W#AkdmV$ zlWUWw+Pk9xPb3v`vB;1+Bb+l)M79Ak9sWii79}#mJ_+pV{hbuN?Ayq*Ccl&0vrHFWtN+{sIdQ72@enNrS>5+ulgAz;Dw_l)_eZoN}Y zX-i9+AW$eD2USgm@Ch+rZw&+47LBN%z zD{^&d0F>#{04ms*T9^k8^1@_`xWJpVzRhGLfaHJx0Kp_38IG5c6idBY?(`NbhG4FC zhTChlQ@H!CR=$>=T12R&rq`iMT4uNfE&U zW+QWkFIBqTm~+dIP(OF8U8$FJt%W$GiiPYD=?GhBEY8|Stvdo$_>6bEFx6>kz_O>1 z*+5ECLqLsy5T$@P-%%vNI%WY%Lj!JMV~1nbK1ii24njkhy`6}ks5ayVcM#Nhcd0ik z(`ifHL8)zO9=5n*2?t9 z2>@{(*b328xYo*$lq8oM^hi)7NCgVm_LUg~7#v{jlKNAebDfr^@nWZ;a*~lsLeX7W zOG@oRk^v!xROYqmDkwgLlcqu3PGFMmL)t9!ylE5?3dl)8I|G=~b-Z+XQOP|mvbl0y zc5uGsOGUPwqxW+~a8+ZkxTTpvZ4Dr#gSjQWiHIY76r9L?BC2=EV?0{H5&&2TD)=Eu zK}>Ep91i{Ct>WEv$_DFCcBXRMUej(0c2XOKxDpToR1or2Fcz3tkgnT--d#;g)|P(z zlvQwjNz`kh;`_dGl;)!1L=up_0U!W`q#{WK<8modc#B9R5I{h8mXHL8fz)Q0C?Jvh zX;PCMr<}0_5AiPI(sQVzeRoW)Lov5cNQ6LgwMFc{WLGRwjAQiQC^S*xf+U<1lg zpy?#~j^q^?kvQ-_WYeidZ04F(tzjj=`nGI;$eV&pj3yD=$_f!@}aUvi4pl2)%F4c1dDQ*-Hnmw-%- zz#6uXrV^?;7j1CXSUU74oFXFEl1RCH?arOK$CVJRg(PLZWLWD+DKjZjr2cl~iAqnE~q z-Wa1+rhrl$2v|{CR8%ynDlmIM20)x_GktszS?V=bv$|00N=O1u#Xe*Kw(vJR^M!`9 zMrNl%RY9NVsx+u9(>$*z6{oRM&WTqVK~OxENgxrh-Kac#og}TY!3wEh%
zKvQhMl>$;q%t2WbKCbw0^oKBi%a=N3-dL)p z(zK^q+F3$LGB`*FpXzW zoIMRsOCL#fcAU#jok2-UmX{WVZ2;>)*nEIS{Pw~QDRPx?*56d2r2hczEM)jwByiBL ztM@`fu;vUvEW%)r1n+H*79OWsu2k(HRko6tOKU38sXgQ<2;Y3DFh(KUuXM$t-`*=Ow$!^SYtEvmYg$T(3Qp;ig-9kKK|97D z`8uICSJhi%sA}z(?iDoD#n-BeokN8{64Og1U=6|9BoJZ&7+C)RpMGcV(ETGyal-<6 zg1RUPg82AGlOW&Aw3US_MKf{%)~z~x#LkeFBoYVKc!2^=As12U*rDoewWYSxZ8LPD zPLLoXT}adc+&}}<-`^AZ+EVLJ7N7uyN=c0nW(VStyn#Gox4O?%r+S3(ZDcy#b7i%H zNJ86m5w_Dk;v?yYKywdg4o;(2^u6*bDqvd7sOl}ZO?Qg6zLC+UsrD)vPnz3aNR$~P z(1-*_r}dro?GtT;`E<>NdK8o-2Fa5V?*rU+<9t{D0EB+3*w|e?voU!-V$jnr`Gp}$ zDN0l41t}z%5D4ubi0_L`PFJ(v+HShZb)!>GHid+#Y1k+N1SQEZJ|pLRW+aiG+PAG9 zVk9t(4{JGLY8!&0e+UDyD*lll#~zIQeDD0ZoDr4NtA>K4R#P}ZfuxvFJIL+u0QvUD zx#{KT7}UW435D-G@J#Xl0BiyXynj#VX~NRM%;xuQl*3A76FZIsa(3@KbAZ=aSLN6p zouRjtGe6;0#0Vhv=lC2+-}x5&g$ZFL1G-cUfPWA(Kd9sDIE%g{P%O48mYq^jQRJyQ zWKN|5J5KSygC~Q`0s*|%bg7NnL>#x`s;4X4>#x05T|K;|y2l!+30X-cB~EAy1i((2 z1Sk{r9OB$9*;3WhUYLfnO`e+hm})H5_cYuV>eS*=+X_0=Wz>i!cu0;0A@@YO8FfvA zFm;CgR4p`b6HjI}3kx$ZGlr9jK zl~6zl^z8tEHr(!UV!0y0lqj;DI6Chii#qyEEI*LmerwV1nUqF1Q^9= z0LpP?l}(C!0%=+jv{QhhRijcvZ~-JN2;;f>PBP%6 zCqPwg6RA3#F%;n;mCX<&lM>qoh`zR=#a2=N#@9k1jK>|(vhFEWyae5`Qo%+>NZWV~IF!d_ZT`Mg- zl?1?6qEhS)w;&}k#75W>UV8JLscKhB`%N_ZR$6hdSO_5L&?G3pK9MBxGEOX^cDid{ zPt&QUQhw&OEya`#NmC%mg%W3I+GDWAPiJ+}yPQ-dlE>`^Jk=zCgrm=u>Qr(B%z}C2 z43d|GliZAk$ow5?3RD1M_{M|b?V+OulK%jo^Cc5ifw4%-SfkVA)k=6?{G+j0cV#~4DWxAh5tNw-wFB4qo zZnBLjQQQ@!I>`x9^#MKjCxTprje}c6#r<{CfJ#M_$NvCfc8|`WH3xqCoLLG>_L}cX z%1QE8Po$7ZI=3;rfC1dd#x-B_3qF@r?U=360>^Gm&k|FBeTY2>%ZdWqI zl%Tl4fPj4lL6Tq%$lUHsoI5Qy?5%ra%}vsc)ikY1OR7t1jzU)2#1+Tl^^Z{Y!w7(x z%!~oP{{S!;{{XS>+iUYUE(}g?y0&4|R3N00sc3W!w*LU%WP6@|hZ+9>=X%KqF4Pq% zI)Tu*GwmR4+#R;wJK{zt*&P7+ws&=;C?;vnkVJ&R+i3uaKLqoQD!j33yCP9XK*(l0jRm)3g#v z-ZmOyM}GT#cgFHF+vA0-{T1)I{{Rfnz8IO$E!A1GBJI@aSt=UP+7=8K6)7Kwup@Zf zaU2H)x24(Qw$|<5mW^L_U=J}x8kP7p9kmWWk70~J067oSri^>Zm=8nu76S@F?y+X(V)g+jiB%V0jb3Fe5rae7>Tj&pY=T^aTsRYE3LF0eZiS`>%*)t38IFvL> z+Hj%7ENLL8@g7fk5d*m%*iKlvwOXo5l&vZ*D0y&FHzpxNk;d?L`N04dft?|nOwaif zXWFuOgp%N=c6o<)+XDJoiVa`((4q@6RG=3oN!-kFKVO`B{jMHct+c0*rIZ9D60b=R zG?+=;M#4EbP|Mvqzt&KpLj%fKmzUZ1e9k98B`<@#k#4HF=UR)+ zy_(ik-8+bGxs(uvx~Y`P{Xp%sk79Nw6MmznIRQ)aSC%cQbt*3fGT26)B1(?OPWw!l zf_KCi=}%G~>7~xIU9C0NyP7G{T9j%PETy=I5CRwGs1NW3h2(uD-VR*Gi^g!%v@R+B0QK<5eBYNIGzT>_%X_tzbD zvb%-esrQwtWGx|=Tk_jlfe;d{AkO>^y!6n{S@w@5+i9IPOER0GYKQ=o64I0B)N4pO z)VDPfzT};&GAQc*#s+W+L)|GCf<$$9jgE;0= z(uU>^Nz1b^Z8vFcaa9N_P$@r1XWHEkJ;vgk$xBCW7OLBQ>n^O^UTTD8+Df;RT7?t< zgXKL=kV2zM2~e5cQ@$D%cZ9IT#Y<(zDku|BAESMbE#_Qp3Lq%DQVLh3Xj)|^U`XXd z#O*e8%_+2X2QSmwE2->enYZn^YSM})DrlNmLLX&{RX%E8ZC<4~%A^g{6Sxfg^PBQh zIWp08&v~BPk~0-erF0ea6{U4o%GQ?DQn-s{Fm?AIAxQw#{n921$rFLk{2S{EGR#

2OXn9R) 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 CAZ$x{%+@G#i) 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 f`R#w{OG?{J*MJx#0|8*Y?*EvLa(Yn&vA1C literal 0 HcmV?d00001 diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs index 930cdde..29f9e07 100644 --- a/CapMachine.Wpf/CanDrive/ToomossCan.cs +++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs @@ -151,6 +151,15 @@ namespace CapMachine.Wpf.CanDrive set { _OpenState = value; RaisePropertyChanged(); } } + private bool _DbcParserState; + /// + /// DBC解析的状态 + /// + public bool DbcParserState + { + get { return _DbcParserState; } + set { _DbcParserState = value; RaisePropertyChanged(); } + } /// /// 扫描到设备个数 @@ -325,6 +334,7 @@ namespace CapMachine.Wpf.CanDrive if (DBCHandle == 0) { Console.WriteLine("Parser DBC File error!"); + DbcParserState = false; return; } else @@ -368,6 +378,9 @@ namespace CapMachine.Wpf.CanDrive } Console.WriteLine(""); } + + //Dbc解析成功 + DbcParserState = true; } /// @@ -676,6 +689,7 @@ namespace CapMachine.Wpf.CanDrive //关闭设备 USB_DEVICE.USB_CloseDevice(DevHandle); OpenState = false; + DbcParserState = false; IsCycleRevice = false; IsCycleSend = false; } diff --git a/CapMachine.Wpf/CapMachine.Wpf.csproj b/CapMachine.Wpf/CapMachine.Wpf.csproj index 3776fa6..9aeae28 100644 --- a/CapMachine.Wpf/CapMachine.Wpf.csproj +++ b/CapMachine.Wpf/CapMachine.Wpf.csproj @@ -13,6 +13,7 @@ + @@ -180,6 +181,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest @@ -666,6 +670,7 @@ + @@ -679,6 +684,7 @@ + diff --git a/CapMachine.Wpf/Dtos/LINConfigExdDto.cs b/CapMachine.Wpf/Dtos/LINConfigExdDto.cs new file mode 100644 index 0000000..8288ac9 --- /dev/null +++ b/CapMachine.Wpf/Dtos/LINConfigExdDto.cs @@ -0,0 +1,47 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Dtos +{ + public class LINConfigExdDto : BindableBase + { + /// + /// 主键 + /// + public long Id { get; set; } + + private int _BaudRate; + /// + /// 波特率 + /// + public int BaudRate + { + get { return _BaudRate; } + set { _BaudRate = value; RaisePropertyChanged(); } + } + + private int _Cycle; + /// + /// 周期 + /// + public int Cycle + { + get { return _Cycle; } + set { _Cycle = value; RaisePropertyChanged(); } + } + + private string? _LdfPath; + /// + /// Ldf文件路径 + /// + public string? LdfPath + { + get { return _LdfPath; } + set { _LdfPath = value; RaisePropertyChanged(); } + } + } +} diff --git a/CapMachine.Wpf/LinDrive/LDFParser.cs b/CapMachine.Wpf/LinDrive/LDFParser.cs new file mode 100644 index 0000000..3334e7f --- /dev/null +++ b/CapMachine.Wpf/LinDrive/LDFParser.cs @@ -0,0 +1,73 @@ +using System.Runtime.InteropServices; +using System.Text; + +namespace CapMachine.Wpf.LinDrive +{ + /// + /// LDF文件解析 + /// + public class LDFParser + { + public const Int32 LDF_PARSER_OK = 0;//没有错误 + public const Int32 LDF_PARSER_FILE_OPEN = (-1);//打开文件出错 + public const Int32 LDF_PARSER_FILE_FORMAT = (-2);//文件格式错误 + public const Int32 LDF_PARSER_DEV_DISCONNECT = (-3);//设备未连接 + public const Int32 LDF_PARSER_HANDLE_ERROR = (-4);//LDF Handle错误 + public const Int32 LDF_PARSER_GET_INFO_ERROR = (-5);//获取解析后的数据出错 + public const Int32 LDF_PARSER_DATA_ERROR = (-6);//数据处理错误 + public const Int32 LDF_PARSER_SLAVE_NACK = (-7);//从机未响应数据 + + [DllImport("USB2XXX.dll")] + public static extern UInt64 LDF_ParserFile(int DevHandle, int LINIndex, byte isMaster, StringBuilder pLDFFileName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetProtocolVersion(UInt64 LDFHandle); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetLINSpeed(UInt64 LDFHandle); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFrameQuantity(UInt64 LDFHandle); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFrameName(UInt64 LDFHandle, int index, StringBuilder pFrameName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFrameSignalQuantity(UInt64 LDFHandle, StringBuilder pFrameName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFrameSignalName(UInt64 LDFHandle, StringBuilder pFrameName, int index, StringBuilder pSignalName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_SetSignalValue(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pSignalName, double Value); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSignalValue(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pSignalName, double[] pValue); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSignalValueStr(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pSignalName, StringBuilder pValueStr); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_SetFrameRawValue(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pRawData); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFrameRawValue(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pRawData); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetFramePublisher(UInt64 LDFHandle, StringBuilder pFrameName, StringBuilder pPublisher); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetMasterName(UInt64 LDFHandle, StringBuilder pMasterName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSchQuantity(UInt64 LDFHandle); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSchName(UInt64 LDFHandle, int index, StringBuilder pSchName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSchFrameQuantity(UInt64 LDFHandle, StringBuilder pSchName); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_GetSchFrameName(UInt64 LDFHandle, StringBuilder pSchName, int index, StringBuilder pFrameName); + + /// + ///将帧数据发送到LIN总线,或者向从机读取数据,内部会根据主机名称和帧发布者自动判断是发送数据还是读取数据,发送数据校验模式是通过协议版本号自动判断的。 + // 若是发送数据给从机,需要先调用LDF_SetSignalValue函数设置该帧里面每个信号的值。 + //若是向从机读数据,调用该函数后,可以通过调用LDF_GetSignalValue函数获取读到的值。 + /// LDFHandle ldf文件解析句柄,通过LDF_ParserFile函数获取 。 + /// pFrameName 帧名称。 + /// + /// + /// + /// + /// + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_ExeFrameToBus(UInt64 LDFHandle, StringBuilder pFrameName, byte FillBitValue); + [DllImport("USB2XXX.dll")] + public static extern Int32 LDF_ExeSchToBus(UInt64 LDFHandle, StringBuilder pSchName, byte FillBitValue); + } +} diff --git a/CapMachine.Wpf/LinDrive/LinCmdData.cs b/CapMachine.Wpf/LinDrive/LinCmdData.cs new file mode 100644 index 0000000..8a37f98 --- /dev/null +++ b/CapMachine.Wpf/LinDrive/LinCmdData.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.LinDrive +{ + /// + /// Lin指令数据 + /// + public class LinCmdData + { + /// + /// 配置项名称-比如转速、功率限制等 + /// + public string? ConfigName { get; set; } + + /// + /// 消息名称/Frame名称/帧名称 + /// + public string? MsgName { get; set; } + + /// + /// 信号名称 + /// + public string? SignalName { get; set; } + + /// + /// 指令值 + /// 没有的话,则给默认值 + /// + public double SignalCmdValue { get; set; } + } +} diff --git a/CapMachine.Wpf/LinDrive/LinLdfModel.cs b/CapMachine.Wpf/LinDrive/LinLdfModel.cs new file mode 100644 index 0000000..376a766 --- /dev/null +++ b/CapMachine.Wpf/LinDrive/LinLdfModel.cs @@ -0,0 +1,93 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.LinDrive +{ + /// + /// LDF消息 + /// + public class LinLdfModel : BindableBase + { + /// + /// 消息Id + /// + public string? MsgId { get; set; } + + /// + /// 配置的中文名称:速度,转速限制,使能等常用的信息数据 + /// 但不是所有的SignalName都会配置一个Name,只是需要时才会配置名称 + /// 但是CanDbcModel集合会包括所有的SignalName名称的 + /// + public string? Name { get; set; } + + /// + /// 消息名称/Frame名称/帧名称 + /// + public string? MsgName { get; set; } + + /// + /// 信号名称 + /// + public string? SignalName { get; set; } + + /// + /// 信号描述 + /// + public string? SignalDesc { get; set; } + + /// + /// 信号单位 + /// + public string? SignalUnit { get; set; } + + + private string? _SignalRtValue = "--"; + /// + /// 信号实时值 + /// + public string? SignalRtValue + { + get { return _SignalRtValue; } + set + { + if (_SignalRtValue != value) + { + _SignalRtValue = value; + RaisePropertyChanged(); + } + } + } + + private StringBuilder _SignalRtValueSb = new StringBuilder(10); + /// + /// 信号实时值 StringBuilder + /// + public StringBuilder SignalRtValueSb + { + get { return _SignalRtValueSb; } + set + { + //if (_SignalRtValueSb != value) + //{ + SignalRtValue = value.ToString(); + _SignalRtValueSb = value; + //} + + } + } + + /// + /// 发布者 + /// + public string? Publisher { get; set; } + + /// + /// 是否主机帧 + /// + public string? IsMasterFrame { get; set; } + } +} diff --git a/CapMachine.Wpf/LinDrive/ToomossLin.cs b/CapMachine.Wpf/LinDrive/ToomossLin.cs new file mode 100644 index 0000000..13fba95 --- /dev/null +++ b/CapMachine.Wpf/LinDrive/ToomossLin.cs @@ -0,0 +1,423 @@ +using CapMachine.Wpf.CanDrive; +using CapMachine.Wpf.Services; +using Microsoft.VisualBasic; +using Prism.Ioc; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Security.Cryptography.Xml; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.LinDrive +{ + /// + /// Toomoss 的LIN驱动 + /// + public class ToomossLin : BindableBase + { + /// + /// 设备Handles集合 + /// + public Int32[] DevHandles { get; set; } = new Int32[20]; + /// + /// 设备Handles + /// 设备句柄,本质为设备序号的低4字节,可以通过调用USB_ScanDevice函数获得 + /// + public Int32 DevHandle { get; set; } = 0; + /// + /// Lin的Index + /// LIN通道索引号,填0或者1,若只有一个通道LIN,则填0. + /// + public Byte LINIndex { get; set; } = 0; + /// + /// Lin的连接State + /// + public bool state { get; set; } + /// + /// Lin的连接设备数量 + /// + public Int32 DevNum { get; set; } + /// + /// Lin的Dll文件的路径 + /// + public string dllFilePath { get; set; } = "USB2XXX.dll"; + + private readonly IContainerProvider ContainerProvider; + + public ToomossLin(IContainerProvider containerProvider) + { + ContainerProvider = containerProvider; + HighSpeedDataService = ContainerProvider.Resolve(); + } + + /// + /// HighSpeedDataService 实例 + /// + public HighSpeedDataService HighSpeedDataService { get; set; } + + /// + /// 开始LDF文件写入 + /// + public ObservableCollection StartLdf(string LdfPath) + { + LDF_Parser(LdfPath); + return ListLinLdfModel; + } + + /// + /// 开始Lin的驱动 + /// + public void StartLinDrive() + { + IsExistsDllFile(); + ScanDevice(); + OpenDevice(); + + } + + private bool _IsCycleRevice; + /// + /// 是否循环接收数据 + /// + public bool IsCycleRevice + { + get { return _IsCycleRevice; } + set { _IsCycleRevice = value; RaisePropertyChanged(); } + } + + private bool _IsCycleSend; + /// + /// 是否循环发送数据 + /// + public bool IsCycleSend + { + get { return _IsCycleSend; } + set { _IsCycleSend = value; RaisePropertyChanged(); } + } + + /// + /// 循环发送数据 + /// + public ushort SendCycle { get; set; } = 100; + + /// + /// 循环接受数据 + /// + public ushort ReviceCycle { get; set; } = 500; + + /// + /// CycleRevice 扫描Task + /// + private static Task CycleReviceTask { get; set; } + + /// + /// CycleSend 扫描Task + /// + private static Task CycleSendTask { get; set; } + + private bool _OpenState; + /// + /// 打开设备的状态 + /// + public bool OpenState + { + get { return _OpenState; } + set { _OpenState = value; RaisePropertyChanged(); } + } + + + private bool _LdfParserState; + /// + /// LDF解析的状态 + /// + public bool LdfParserState + { + get { return _LdfParserState; } + set { _LdfParserState = value; RaisePropertyChanged(); } + } + + + /// + /// LDFHandle + /// + public UInt64 LDFHandle { get; set; } + + /// + /// LDF消息集合 + /// 包括读取的实时值和数据 + /// + public ObservableCollection ListLinLdfModel { get; set; } = new ObservableCollection(); + + /// + /// 要发送的LIN数据 + /// + public List CmdData { get; set; } = new List(); + + /// + /// ******************【1】********************* + /// 是否存在Dll文件 + /// + /// + public bool IsExistsDllFile() + { + if (!File.Exists(dllFilePath)) + { + Console.WriteLine("请先将USB2XXX.dll和libusb-1.0.dll文件复制到exe程序文件输出目录下!"); + Console.WriteLine("dll文件在‘usb2can_lin_pwm_example/sdk/libs/windows’目录下!"); + Console.WriteLine("程序是32位的就复制‘x86’目录下文件,程序是64位的就复制‘x86_64’目录下文件!"); + return false; + } + return true; + } + + + /// + /// ******************【2】********************* + /// 扫描查找设备,并将每个设备的唯一设备号存放到数组中,后面的函数需要用到 + /// + /// + public bool ScanDevice() + { + DevNum = USB_DEVICE.USB_ScanDevice(DevHandles); + if (DevNum <= 0) + { + Console.WriteLine("No device connected!"); + return false; + } + else + { + Console.WriteLine("Have {0} device connected!", DevNum); + DevHandle = DevHandles[0];//获取第一个设备的设备号 + return true; + } + } + + /// + /// ******************【3】********************* + /// 打开设备 + /// + /// + public bool OpenDevice() + { + //打开设备 + OpenState = USB_DEVICE.USB_OpenDevice(DevHandle); + if (!OpenState) + { + Console.WriteLine("Open device error!"); + return false; + } + else + { + Console.WriteLine("Open device success!"); + return true; + } + } + + /// + /// ******************【4】********************* + /// 解析LDF信息 + /// + /// + public void LDF_Parser(string Path) + { + LDFHandle = LDFParser.LDF_ParserFile(DevHandle, LINIndex, 1, new StringBuilder(Path)); + if (LDFHandle == 0) + { + Console.WriteLine("解析LDF文件失败!"); + LdfParserState = false; + return; + } + + //读取LDF文件信息 + Console.WriteLine("ProtocolVersion = {0}", LDFParser.LDF_GetProtocolVersion(LDFHandle)); + Console.WriteLine("LINSpeed = {0}", LDFParser.LDF_GetLINSpeed(LDFHandle)); + + //读取主机名称 + StringBuilder MasterName = new StringBuilder(64); + LDFParser.LDF_GetMasterName(LDFHandle, MasterName); + Console.WriteLine("Master Name = {0}", MasterName); + + ListLinLdfModel.Clear(); + //读取信息 + int FrameLen = LDFParser.LDF_GetFrameQuantity(LDFHandle); + for (int i = 0; i < FrameLen; i++) + { + //读取帧名称和发布者 + StringBuilder FrameName = new StringBuilder(64); + string IsMasterFrame = ""; + if (LDFParser.LDF_PARSER_OK == LDFParser.LDF_GetFrameName(LDFHandle, i, FrameName)) + { + StringBuilder PublisherName = new StringBuilder(64); + LDFParser.LDF_GetFramePublisher(LDFHandle, FrameName, PublisherName); + if (MasterName.Equals(PublisherName)) + { + IsMasterFrame = "是"; + //当前帧为主机发送数据帧 + Console.WriteLine("[MW]Frame[{0}].Name={1},Publisher={2}", i, FrameName, PublisherName); + } + else + { + IsMasterFrame = "否"; + //当前帧为主机读数据帧 + Console.WriteLine("[MR]Frame[{0}].Name={1},Publisher={2}", i, FrameName, PublisherName); + } + + //读取信号信息 + int SignalNum = LDFParser.LDF_GetFrameSignalQuantity(LDFHandle, FrameName); + for (int j = 0; j < SignalNum; j++) + { + StringBuilder SignalName = new StringBuilder(64); + if (LDFParser.LDF_PARSER_OK == LDFParser.LDF_GetFrameSignalName(LDFHandle, FrameName, j, SignalName)) + { + Console.WriteLine("\tSignal[{0}].Name={1}", j, SignalName); + ListLinLdfModel.Add(new LinLdfModel() + { + MsgName = FrameName.ToString(), + Publisher = PublisherName.ToString(), + IsMasterFrame = IsMasterFrame, + SignalName = SignalName.ToString() + }); + } + } + } + } + + //解析成功 + LdfParserState = true; + } + + + /// + /// 发送LIN数据 + /// 发送一次 + /// + public void SendLinMsg(List CmdData) + { + try + { + //防止有多个不同的消息名称/帧,每个帧单独处理发送 + var GroupMsg = CmdData.GroupBy(x => x.MsgName); + foreach (var itemMsg in GroupMsg) + { + foreach (var itemSignal in itemMsg) + { + //主机写操作,发送数据给从机 + LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder(itemMsg.Key), new StringBuilder(itemSignal.SignalName), itemSignal.SignalCmdValue); + } + LDFParser.LDF_ExeFrameToBus(LDFHandle, new StringBuilder(itemMsg.Key), 1); + } + } + catch (Exception ex) + { + + } + } + + + /// + /// 读取信号值 + /// + private StringBuilder ReadValueStr = new StringBuilder(64); + + /// + /// 循环 + /// 主机读操作,读取从机返回的数据值 + /// + public void StartCycleReviceMsg() + { + CycleReviceTask = Task.Run(async () => + { + while (IsCycleRevice) + { + await Task.Delay(ReviceCycle); + try + { + //主机读操作,读取从机返回的数据值 + foreach (var item in ListLinLdfModel) + { + LDFParser.LDF_ExeFrameToBus(LDFHandle, new StringBuilder(item.MsgName), 1); + LDFParser.LDF_GetSignalValueStr(LDFHandle, new StringBuilder(item.MsgName), new StringBuilder(item.SignalName), ReadValueStr); + item.SignalRtValueSb = ReadValueStr; + } + + //StringBuilder ValueStr = new StringBuilder(64); + //LDFParser.LDF_ExeFrameToBus(LDFHandle, new StringBuilder("ID_DATA"), 1); + //LDFParser.LDF_GetSignalValueStr(LDFHandle, new StringBuilder("ID_DATA"), new StringBuilder("Supplier_ID"), ValueStr); + //Console.WriteLine("ID_DATA.Supplier_ID={0}", ValueStr); + //LDFParser.LDF_GetSignalValueStr(LDFHandle, new StringBuilder("ID_DATA"), new StringBuilder("Machine_ID"), ValueStr); + //Console.WriteLine("ID_DATA.Machine_ID={0}", ValueStr); + //LDFParser.LDF_GetSignalValueStr(LDFHandle, new StringBuilder("ID_DATA"), new StringBuilder("Chip_ID"), ValueStr); + //Console.WriteLine("ID_DATA.Chip_ID={0}", ValueStr); + + } + catch (Exception ex) + { + //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}"); + } + } + }); + } + + + /// + /// 循环发送数据 + /// + public void StartCycleSendMsg() + { + CycleSendTask = Task.Run(async () => + { + while (IsCycleSend) + { + await Task.Delay(SendCycle); + try + { + //防止有多个不同的消息名称/帧,每个帧单独处理发送 + var GroupMsg = CmdData.GroupBy(x => x.MsgName); + foreach (var itemMsg in GroupMsg) + { + foreach (var itemSignal in itemMsg) + { + //主机写操作,发送数据给从机 + LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder(itemMsg.Key), new StringBuilder(itemSignal.SignalName), itemSignal.SignalCmdValue); + } + LDFParser.LDF_ExeFrameToBus(LDFHandle, new StringBuilder(itemMsg.Key), 1); + } + + ////主机写操作,发送数据给从机 + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Reg_Set_Voltage"), 13.5); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Ramp_Time"), 3); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Cut_Off_Speed"), 4); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Exc_Limitation"), 15.6); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Derat_Shift"), 2); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("MM_Request"), 2); + //LDFParser.LDF_SetSignalValue(LDFHandle, new StringBuilder("LIN_CONTROL"), new StringBuilder("Reg_Blind"), 1); + } + catch (Exception ex) + { + //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}"); + } + } + }); + } + + + /// + /// 关闭设备 + /// + public void CloseDevice() + { + //关闭设备 + USB_DEVICE.USB_CloseDevice(DevHandle); + OpenState = false; + LdfParserState = false; + IsCycleRevice = false; + IsCycleSend = false; + } + + } +} diff --git a/CapMachine.Wpf/LinDrive/USB2LIN_EX.cs b/CapMachine.Wpf/LinDrive/USB2LIN_EX.cs new file mode 100644 index 0000000..73bea4a --- /dev/null +++ b/CapMachine.Wpf/LinDrive/USB2LIN_EX.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.LinDrive +{ + //注意:使用这些函数需要1.5.30及以上的固件才支持 + public class USB2LIN_EX + { + //定义函数返回错误代码 + public const Int32 LIN_EX_SUCCESS = (0); //函数执行成功 + public const Int32 LIN_EX_ERR_NOT_SUPPORT = (-1); //适配器不支持该函数 + public const Int32 LIN_EX_ERR_USB_WRITE_FAIL = (-2); //USB写数据失败 + public const Int32 LIN_EX_ERR_USB_READ_FAIL = (-3); //USB读数据失败 + public const Int32 LIN_EX_ERR_CMD_FAIL = (-4); //命令执行失败 + public const Int32 LIN_EX_ERR_CH_NO_INIT = (-5); //该通道未初始化 + public const Int32 LIN_EX_ERR_READ_DATA = (-6); //LIN读数据失败 + //LIN和校验模式 + public const Byte LIN_EX_CHECK_STD = 0; //标准校验,不含PID + public const Byte LIN_EX_CHECK_EXT = 1; //增强校验,包含PID + public const Byte LIN_EX_CHECK_USER = 2; //自定义校验类型,需要用户自己计算并传入Check,不进行自动校验 + public const Byte LIN_EX_CHECK_NONE = 3; //接收数据校验错误 + public const Byte LIN_EX_CHECK_ERROR = 4; //接收数据校验错误 + //定义主从模式 + public const Byte LIN_EX_MASTER = 1;//主机 + public const Byte LIN_EX_SLAVE = 0;//从机 + + public const Byte LIN_EX_MSG_TYPE_UN = 0; //未知类型 + public const Byte LIN_EX_MSG_TYPE_MW = 1; //主机向从机发送数据 + public const Byte LIN_EX_MSG_TYPE_MR = 2; //主机从从机读取数据 + public const Byte LIN_EX_MSG_TYPE_SW = 3; //从机发送数据 + public const Byte LIN_EX_MSG_TYPE_SR = 4; //从机接收数据 + public const Byte LIN_EX_MSG_TYPE_BK = 5; //只发送BREAK信号,若是反馈回来的数据,表明只检测到BREAK信号 + public const Byte LIN_EX_MSG_TYPE_SY = 6; //表明检测到了BREAK,SYNC信号 + public const Byte LIN_EX_MSG_TYPE_ID = 7; //表明检测到了BREAK,SYNC,PID信号 + public const Byte LIN_EX_MSG_TYPE_DT = 8; //表明检测到了BREAK,SYNC,PID,DATA信号 + public const Byte LIN_EX_MSG_TYPE_CK = 9; //表明检测到了BREAK,SYNC,PID,DATA,CHECK信号 + + //LIN数据帧格式定义 + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct LIN_EX_MSG + { + [MarshalAs(UnmanagedType.U4)] + public UInt32 Timestamp; //时间戳 + [MarshalAs(UnmanagedType.U1)] + public Byte MsgType; //帧类型 + [MarshalAs(UnmanagedType.U1)] + public Byte CheckType; //校验类型 + [MarshalAs(UnmanagedType.U1)] + public Byte DataLen; //LIN数据段有效数据字节数 + [MarshalAs(UnmanagedType.U1)] + public Byte Sync; //固定值,0x55 + [MarshalAs(UnmanagedType.U1)] + public Byte PID; //帧ID + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8, ArraySubType = UnmanagedType.U1)] + public Byte[] Data; //数据 + [MarshalAs(UnmanagedType.U1)] + public Byte Check; //校验,只有校验数据类型为LIN_EX_CHECK_USER的时候才需要用户传入数据 + [MarshalAs(UnmanagedType.U1)] + public Byte BreakBits; //该帧的BRAK信号位数,有效值为10到26,若设置为其他值则默认为13位 + [MarshalAs(UnmanagedType.U1)] + public Byte Reserve1; + } + //初始化 + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_Init(Int32 DevHandle, Byte LINIndex, Int32 BaudRate, Byte MasterMode); + //主机模式操作函数 + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterSync(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pInMsg, IntPtr pOutMsg, Int32 MsgLen); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterBreak(Int32 DevHandle, Byte LINIndex); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterWrite(Int32 DevHandle, Byte LINIndex, Byte PID, Byte[] pData, Byte DataLen, Byte CheckType); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterRead(Int32 DevHandle, Byte LINIndex, Byte PID, Byte[] pData); + //从机模式操作函数 + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_SlaveSetIDMode(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pLINMsg, Int32 MsgLen); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_SlaveGetIDMode(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_SlaveGetData(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg); + //电源控制相关函数 + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_CtrlPowerOut(Int32 DevHandle, Byte LINIndex, Byte State); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_GetVbatValue(Int32 DevHandle, Int16[] pBatValue); + //主机模式自动发送数据相关函数 + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterStartSch(Int32 DevHandle, Byte LINIndex, LIN_EX_MSG[] pLINMsg, Int32 MsgLen); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterStopSch(Int32 DevHandle, Byte LINIndex); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterGetSch(Int32 DevHandle, Byte LINIndex, IntPtr pLINMsg); + + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_MasterOfflineSch(Int32 DevHandle, Byte LINIndex, Int32 BaudRate, LIN_EX_MSG[] pLINMsg, Int32 MsgLen); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_DecodeListFile(string pFileName, Byte CheckType, Int32 BaudRate, Byte[] pReadDataList, Byte ReadDataListLen, Byte[] pCheckTypeList, Byte CheckTypeListLen); + [DllImport("USB2XXX.dll")] + public static extern Int32 LIN_EX_GetListFileMsg(Int32 MsgIndex, Int32 MsgLen, IntPtr pLINMsg); + } +} diff --git a/CapMachine.Wpf/LinDrive/USB_DEVICE.cs b/CapMachine.Wpf/LinDrive/USB_DEVICE.cs new file mode 100644 index 0000000..b7dc145 --- /dev/null +++ b/CapMachine.Wpf/LinDrive/USB_DEVICE.cs @@ -0,0 +1,140 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.LinDrive +{ + public class USB_DEVICE + { + //定义电压输出值 + public const Byte POWER_LEVEL_NONE = 0; //不输出 + public const Byte POWER_LEVEL_1V8 = 1; //输出1.8V + public const Byte POWER_LEVEL_2V5 = 2; //输出2.5V + public const Byte POWER_LEVEL_3V3 = 3; //输出3.3V + public const Byte POWER_LEVEL_5V0 = 4; //输出5.0V + //设备信息定义 + public struct DEVICE_INFO + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public Byte[] FirmwareName; //固件名称字符串 + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public Byte[] BuildDate; //固件编译时间字符串 + public UInt32 HardwareVersion;//硬件版本号 + public UInt32 FirmwareVersion;//固件版本号 + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public UInt32[] SerialNumber; //适配器序列号 + public UInt32 Functions; //适配器当前具备的功能 + } + //方法定义 + /** + * @brief 初始化USB设备,并扫描设备连接数,必须调用 + * @param pDevHandle 每个设备的设备号存储地址 + * @retval 扫描到的设备数量 + */ + [DllImport("USB2XXX.dll")] + public static extern Int32 USB_ScanDevice(Int32[] pDevHandle); + /** + * @brief 打开设备,必须调用 + * @param DevHandle 设备索引号 + * @retval 打开设备的状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool USB_OpenDevice(Int32 DevHandle); + /** + * @brief 关闭设备 + * @param DevHandle 设备索引号 + * @retval 关闭设备的状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool USB_CloseDevice(Int32 DevHandle); + /** + * @brief 复位设备程序,复位后需要重新调用USB_ScanDevice,USB_OpenDevice函数 + * @param DevHandle 设备索引号 + * @retval 复位设备的状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool USB_ResetDevice(Int32 DevHandle); + + /** + * @brief 检测到USB断开连接后,重新连接设备 + * @param DevHandle 设备号 + * @retval 重连状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool USB_RetryConnect(Int32 DevHandle); + + /** + * @brief 获取设备信息,比如设备名称,固件版本号,设备序号,设备功能说明字符串等 + * @param DevHandle 设备索引号 + * @param pDevInfo 设备信息存储结构体指针 + * @param pFunctionStr 设备功能说明字符串 + * @retval 获取设备信息的状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_GetDeviceInfo(Int32 DevHandle, ref DEVICE_INFO pDevInfo, StringBuilder pFunctionStr); + /** + * @brief 擦出用户区数据 + * @param DevHandle 设备索引号 + * @retval 用户区数据擦出状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_EraseUserData(Int32 DevHandle); + + /** + * @brief 向用户区域写入用户自定义数据,写入数据之前需要调用擦出函数将数据擦出 + * @param DevHandle 设备索引号 + * @param OffsetAddr 数据写入偏移地址,起始地址为0x00,用户区总容量为0x10000字节,也就是64KBye + * @param pWriteData 用户数据缓冲区首地址 + * @param DataLen 待写入的数据字节数 + * @retval 写入用户自定义数据状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_WriteUserData(Int32 DevHandle, Int32 OffsetAddr, byte[] pWriteData, Int32 DataLen); + + /** + * @brief 从用户自定义数据区读出数据 + * @param DevHandle 设备索引号 + * @param OffsetAddr 数据写入偏移地址,起始地址为0x00,用户区总容量为0x10000字节,也就是64KBye + * @param pReadData 用户数据缓冲区首地址 + * @param DataLen 待读出的数据字节数 + * @retval 读出用户自定义数据的状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_ReadUserData(Int32 DevHandle, Int32 OffsetAddr, byte[] pReadData, Int32 DataLen); + + /** + * @brief 设置可变电压输出引脚输出电压值 + * @param DevHandle 设备索引号 + * @param PowerLevel 输出电压值 + * @retval 设置输出电压状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_SetPowerLevel(Int32 DevHandle, byte PowerLevel); + /** + * @brief 或者CAN或者LIN的时间戳原始值 + * @param DevHandle 设备索引号 + * @param pTimestamp 时间戳指针 + * @retval 获取时间戳状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_GetTimestamp(Int32 DevHandle, byte BusType, Int32[] pTimestamp); + + /** + * @brief 复位CAN/LIN时间戳,需要在初始化CAN/LIN之后调用 + * @param DevHandle 设备索引号 + * @retval 复位时间戳状态 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_ResetTimestamp(Int32 DevHandle); + /** + * @brief 获取dll编译日期 + * @param pDateTime 输出DLL编译日期字符串 + * @retval 获取dll编译日期字符串 + */ + [DllImport("USB2XXX.dll")] + public static extern bool DEV_GetDllBuildTime(StringBuilder pDateTime); + } +} diff --git a/CapMachine.Wpf/MapperProfile/LINConfigExdProfile.cs b/CapMachine.Wpf/MapperProfile/LINConfigExdProfile.cs new file mode 100644 index 0000000..18f4087 --- /dev/null +++ b/CapMachine.Wpf/MapperProfile/LINConfigExdProfile.cs @@ -0,0 +1,19 @@ +using AutoMapper; +using CapMachine.Model.CANLIN; +using CapMachine.Wpf.Dtos; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.MapperProfile +{ + public class LINConfigExdProfile : Profile + { + public LINConfigExdProfile() + { + CreateMap().ReverseMap(); + } + } +} diff --git a/CapMachine.Wpf/Models/CanLinRunStateModel.cs b/CapMachine.Wpf/Models/CanLinRunStateModel.cs new file mode 100644 index 0000000..2241dcf --- /dev/null +++ b/CapMachine.Wpf/Models/CanLinRunStateModel.cs @@ -0,0 +1,68 @@ +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static CapMachine.Wpf.Models.ComEnum; + +namespace CapMachine.Wpf.Models +{ + /// + /// CAN 和 LIN运行的状态汇总模型 + /// + public class CanLinRunStateModel:BindableBase + { + private CanLinEnum _CurSysSelectedCanLin; + /// + /// 当前系统选中使用的CanLin状态 + /// + public CanLinEnum CurSysSelectedCanLin + { + get { return _CurSysSelectedCanLin; } + set + { + _CurSysSelectedCanLin = value; + switch (value) + { + case CanLinEnum.No: + SelectedCanLinMsg = "无"; + CanLinRunState = false; + break; + case CanLinEnum.Can: + SelectedCanLinMsg = "CAN"; + CanLinRunState=true; + break; + case CanLinEnum.Lin: + SelectedCanLinMsg = "LIN"; + CanLinRunState = true; + break; + default: + break; + } + } + } + + private bool _CanLinRunState; + /// + /// CAN 和 LIN的运行状态 + /// + public bool CanLinRunState + { + get { return _CanLinRunState; } + set { _CanLinRunState = value;RaisePropertyChanged(); } + } + + + private string? _SelectedCanLinMsg; + /// + /// CANLIN 选择的字符串 + /// + public string? SelectedCanLinMsg + { + get { return _SelectedCanLinMsg; } + set { _SelectedCanLinMsg = value; RaisePropertyChanged(); } + } + + } +} diff --git a/CapMachine.Wpf/Models/ComEnum.cs b/CapMachine.Wpf/Models/ComEnum.cs index 93a348c..e075a00 100644 --- a/CapMachine.Wpf/Models/ComEnum.cs +++ b/CapMachine.Wpf/Models/ComEnum.cs @@ -54,5 +54,26 @@ namespace CapMachine.Wpf.Models /// Byte = 0, } + + /// + /// CAN和LIN的选择 + /// + public enum CanLinEnum + { + /// + /// 没选择 + /// + No = 0, + + /// + /// Can + /// + Can = 1, + + /// + /// Lin + /// + Lin = 2, + } } } diff --git a/CapMachine.Wpf/Models/SysExdInfo.cs b/CapMachine.Wpf/Models/SysExdInfo.cs new file mode 100644 index 0000000..39259c8 --- /dev/null +++ b/CapMachine.Wpf/Models/SysExdInfo.cs @@ -0,0 +1,65 @@ +using CapMachine.Wpf.Models.Tag; +using HslCommunication.Profinet.Siemens; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Models +{ + /// + /// 系统拓展信息 + /// 包括:运行时间,步骤等PLC等其他信息,不在实时数据集合中的其他信息 + /// + public class SysExdInfo:BindableBase + { + /// + /// 实例化函数 + /// + public SysExdInfo(SiemensS7Net siemensS7Net) + { + QuickTags = new List() + { + new QuickTag(siemensS7Net){ Name="RunTime-Sec",Group="时间",Unit="秒",ValueAddress="VW190",Precision=0,ValueType=ComEnum.DataType.Short,ByteLength=2}, + new QuickTag(siemensS7Net){ Name="RunTime-Min",Group="时间",Unit="分",ValueAddress="VW192",Precision=0,ValueType=ComEnum.DataType.Short,ByteLength=2}, + new QuickTag(siemensS7Net){ Name="RunTime-Hour",Group="时间",Unit="时",ValueAddress="VW194",Precision=0,ValueType=ComEnum.DataType.Short,ByteLength=2}, + }; + + + RunTimeSecQuickTag= QuickTags.Find(x => x.Name == "RunTime-Sec")!; + RunTimeMinQuickTag = QuickTags.Find(x => x.Name == "RunTime-Min")!; + RunTimeHourQuickTag = QuickTags.Find(x => x.Name == "RunTime-Hour")!; + } + + private QuickTag RunTimeSecQuickTag { get; set; } + private QuickTag RunTimeMinQuickTag { get; set; } + private QuickTag RunTimeHourQuickTag { get; set; } + + /// + /// 快速标签 + /// + public List QuickTags { get; set; } + + private string _RunTimeMsg; + /// + /// 运行时间消息 + /// + public string RunTimeMsg + { + get { return _RunTimeMsg; } + set { _RunTimeMsg = value;RaisePropertyChanged(); } + } + + /// + /// 合并运行时间 + /// + public void SumRunTime() + { + RunTimeMsg= RunTimeHourQuickTag.ValueStr + "时" + RunTimeMinQuickTag.ValueStr + "分" + RunTimeSecQuickTag.ValueStr + "秒"; + } + + + } +} diff --git a/CapMachine.Wpf/Models/Tag/QuickTag.cs b/CapMachine.Wpf/Models/Tag/QuickTag.cs new file mode 100644 index 0000000..c263533 --- /dev/null +++ b/CapMachine.Wpf/Models/Tag/QuickTag.cs @@ -0,0 +1,147 @@ +using HslCommunication; +using HslCommunication.Core; +using HslCommunication.Core.Device; +using HslCommunication.Profinet.Siemens; +using NPOI.SS.Formula.Functions; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static CapMachine.Wpf.Models.ComEnum; + +namespace CapMachine.Wpf.Models.Tag +{ + /// + /// 快速和简单的标签 + /// + public class QuickTag : BindableBase + { + public QuickTag(SiemensS7Net deviceTcpNet) + { + + SiemensS7Net = deviceTcpNet; + } + + /// + /// 驱动 + /// + public SiemensS7Net SiemensS7Net { get; set; } + + /// + /// 名称 + /// + public string Name { get; set; } + + /// + /// 标签组 + /// + public string? Group { get; set; } + + ///// + ///// 实时值 + ///// + //public abstract IRegisterValue RtValue { get; set; } + + private object? _Value; + /// + /// 实时值 + /// + public object? Value + { + get { return _Value; } + set + { + _Value = value; + ValueStr = value?.ToString(); + } + } + + private OperateResult? _OperateResultSource; + /// + /// 原始值实时值 + /// + public OperateResult? OperateResultSource + { + get { return _OperateResultSource; } + set + { + switch (ValueType) + { + case DataType.Short: + Value = SiemensS7Net.ByteTransform.TransInt16(value!.Content, 0); + break; + case DataType.Double: + Value = SiemensS7Net.ByteTransform.TransDouble(value!.Content, 0); + break; + case DataType.String: + Value = SiemensS7Net.ByteTransform.TransString(value!.Content, Encoding.ASCII); + break; + case DataType.Byte: + Value = SiemensS7Net.ByteTransform.TransByte(value!.Content, 0); + break; + default: + break; + } + _OperateResultSource = value; + } + } + + /// + /// 数据类型信息 + /// + public DataType ValueType { get; set; } + + /// + /// 值地址信息 + /// + public string? ValueAddress { get; set; } + + /// + /// 地址信息 Index + /// + public int Index { get; set; } + + /// + /// 字节长度 + /// + public ushort ByteLength { get; set; } + + /// + /// 最大值 + /// + public double MaxValue { get; set; } + + /// + /// 最小值 + /// + public double MinValue { get; set; } + + /// + /// 精度 到PLC的转换精度/分辨率 + /// + public short Precision { get; set; } + + /// + /// 小数点 展示时用的小数点 + /// + public short DecimalPoint { get; set; } + + /// + /// 单位 + /// + public string? Unit { get; set; } + + private string? _ValueStr; + /// + /// 值的字符串 + /// + public string? ValueStr + { + get { return _ValueStr; } + set { _ValueStr = value; RaisePropertyChanged(); } + } + + } +} diff --git a/CapMachine.Wpf/Services/AppStartService.cs b/CapMachine.Wpf/Services/AppStartService.cs new file mode 100644 index 0000000..47c2a4d --- /dev/null +++ b/CapMachine.Wpf/Services/AppStartService.cs @@ -0,0 +1,160 @@ +using Prism.Regions; +using Prism.Services.Dialogs; +using Syncfusion.Windows.Shared; +using Prism.Ioc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using CapMachine.Wpf.Views; + +namespace CapMachine.Wpf.Services +{ + /// + /// App启动服务 + /// 暂时不用 + /// + public class AppStartService:IAppStartService + { + /// + /// 退出 + /// + public void Exit() + { + if (System.Windows.Application.Current is IAppTaskBar appTaskBar) + appTaskBar.Dispose(); + + Environment.Exit(0); + } + + /// + /// 登录退出 + /// + public void Logout() + { + App.Current.MainWindow.Hide(); + SplashScreenInitialized(); + App.Current.MainWindow.Show(); + + if (App.Current.MainWindow.DataContext is INavigationAware navigationAware) + navigationAware.OnNavigatedTo(null); + } + + /// + /// CreateShell + /// + public void CreateShell() + { + var container = ContainerLocator.Container; + + //var userConfigurationService = container.Resolve(); + //userConfigurationService.OnAccessTokenRefresh = OnAccessTokenRefresh; + //userConfigurationService.OnSessionTimeOut = OnSessionTimeout; + + //初始的窗户 + SplashScreenInitialized(); + + #region 初版 + + //Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CN"); + + //从容器中获取MainView的实例对象,系统运行的主窗体 + //var container = ContainerLocator.Container; + var shell = container.Resolve("MainView"); + + //加载种子数据 + //var SeekData = new SeekData(container.Resolve()); + + if (shell is Window view) + { + //更新Prism注册区域信息 + var regionManager = container.Resolve(); + RegionManager.SetRegionManager(view, regionManager); + RegionManager.UpdateRegions(); + + //给MainView的MainViewFooterContentRegion区域设置FooterView具体的信息 + regionManager.RequestNavigate("MainViewFooterContentRegion", nameof(FooterView)); + regionManager.RequestNavigate("MainViewContentRegion", nameof(MonitorView)); + + //调用首页的INavigationAware 接口做一个初始化操作 + if (view.DataContext is INavigationAware navigationAware) + { + navigationAware.OnNavigatedTo(null); + //呈现首页 + App.Current.MainWindow = view; + } + } + + //先加载服务,防止在ViewModel中使用时速度慢 + var appVersionService = ContainerLocator.Container.Resolve(); + //var appVersionService1 = ContainerLocator.Container.Resolve(); + //var appVersionService2 = ContainerLocator.Container.Resolve(); + var appVersionService12 = ContainerLocator.Container.Resolve(); + var appVersionService3 = ContainerLocator.Container.Resolve(); + var appVersionService4 = ContainerLocator.Container.Resolve(); + var appVersionService5 = ContainerLocator.Container.Resolve(); + var appVersionService6 = ContainerLocator.Container.Resolve(); + var appVersionService7 = ContainerLocator.Container.Resolve(); + var appVersionService8 = ContainerLocator.Container.Resolve(); + var appVersionService9 = ContainerLocator.Container.Resolve(); + var appVersionService10 = ContainerLocator.Container.Resolve(); + var appVersionService11 = ContainerLocator.Container.Resolve(); + var appVersionService15 = ContainerLocator.Container.Resolve(); + + + + //给当前的全局异常捕捉服务使用 + //LogService = ContainerLocator.Container.Resolve(); + //LogService.Error("ex.ToString()"); + //base.OnInitialized(); + + #endregion + + + //var shell = container.Resolve("MainView"); + //if (shell is ChromelessWindow view) + //{ + // var regionManager = container.Resolve(); + // RegionManager.SetRegionManager(view, regionManager); + // RegionManager.UpdateRegions(); + + // if (view.DataContext is INavigationAware navigationAware) + // { + // navigationAware.OnNavigatedTo(null); + // App.Current.MainWindow = (Window)shell; + // } + //} + + } + + private void SplashScreenInitialized() + { + var dialogService = ContainerLocator.Container.Resolve(); + var result = dialogService.ShowWindow("SplashScreenView").Result; + + if (result == ButtonResult.Ignore) + { + if (!Authorization()) Exit(); + } + else if (result == ButtonResult.No) Exit(); + } + + private bool Authorization() + { + var validationResult = Validation(); + if (validationResult == ButtonResult.Retry) + return Authorization(); + + return validationResult == ButtonResult.OK; + + static ButtonResult Validation() + { + var dialogService = ContainerLocator.Container.Resolve(); + return dialogService.ShowWindow("MainView").Result; + } + } + + } +} diff --git a/CapMachine.Wpf/Services/ApplicationContext.cs b/CapMachine.Wpf/Services/ApplicationContext.cs new file mode 100644 index 0000000..47760df --- /dev/null +++ b/CapMachine.Wpf/Services/ApplicationContext.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 应用程序上下文,语言,多租户,登录等信息 + /// + public class ApplicationContext: IApplicationContext + { + + } +} diff --git a/CapMachine.Wpf/Services/CanDriveService.cs b/CapMachine.Wpf/Services/CanDriveService.cs index a6ab03c..1ddec9b 100644 --- a/CapMachine.Wpf/Services/CanDriveService.cs +++ b/CapMachine.Wpf/Services/CanDriveService.cs @@ -249,7 +249,25 @@ namespace CapMachine.Wpf.Services return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; } return 0; + } + /// + /// 速度的数据的获取 + /// 获取速度数据值 + /// 从DBC中获取Speed数据给数据中心集合 + /// + /// + /// + public double GetDbcSpeedValueBySpeedName(string Name) + { + if (!ToomossCanDrive.IsCycleRevice) return 0; + + if (ListCanDbcModel.Any(a => a.Name == Name)) + { + //double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); + return double.TryParse(ListCanDbcModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + } + return 0; } #endregion diff --git a/CapMachine.Wpf/Services/ComActionService.cs b/CapMachine.Wpf/Services/ComActionService.cs index 0f5bf7e..21fb180 100644 --- a/CapMachine.Wpf/Services/ComActionService.cs +++ b/CapMachine.Wpf/Services/ComActionService.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; namespace CapMachine.Wpf.Services { - + /// /// 公共操作的服务 /// 存放公共事件的服务 @@ -22,12 +22,14 @@ namespace CapMachine.Wpf.Services public DataRecordService DataRecordService { get; } public SysRunService SysRunServer { get; } public PPCService PPCService { get; } + public CanDriveService CanDriveService { get; } + public LinDriveService LinDriveService { get; } public MachineRtDataService MachineRtDataService { get; } public IDialogService DialogService { get; } public ComActionService(ConfigService configService, IEventAggregator eventAggregator, - DataRecordService dataRecordService, SysRunService sysRunService,PPCService pPCService, + DataRecordService dataRecordService, SysRunService sysRunService, PPCService pPCService, CanDriveService canDriveService, LinDriveService linDriveService, MachineRtDataService machineRtDataService, IDialogService dialogService) { ConfigService = configService; @@ -36,6 +38,8 @@ namespace CapMachine.Wpf.Services DataRecordService = dataRecordService; SysRunServer = sysRunService; PPCService = pPCService; + CanDriveService = canDriveService; + LinDriveService = linDriveService; MachineRtDataService = machineRtDataService; DialogService = dialogService; @@ -43,7 +47,6 @@ namespace CapMachine.Wpf.Services } - #region 公共弹窗操作 /// @@ -90,6 +93,42 @@ namespace CapMachine.Wpf.Services } + + + + #endregion + + + #region CAN和LIN协调 + + //CAN和LIN同一个时刻只能有一个在工作 + + /// + /// CAN是否可以工作 + /// + /// + public bool IsCanToDoWork() + { + if (LinDriveService.ToomossLinDrive.OpenState == true) + { + return false; + } + return true; + } + + /// + /// LIN是否可以工作 + /// + /// + public bool IsLINToDoWork() + { + if (CanDriveService.ToomossCanDrive.OpenState == true) + { + return false; + } + return true; + } + #endregion } } diff --git a/CapMachine.Wpf/Services/ConfigService.cs b/CapMachine.Wpf/Services/ConfigService.cs index 78003de..86baabc 100644 --- a/CapMachine.Wpf/Services/ConfigService.cs +++ b/CapMachine.Wpf/Services/ConfigService.cs @@ -1,9 +1,12 @@ using CapMachine.Model; +using CapMachine.Model.CANLIN; using CapMachine.Wpf.Dtos; +using CapMachine.Wpf.Models; using CapMachine.Wpf.PrismEvent; using Prism.Events; using Prism.Mvvm; using Prism.Services.Dialogs; +using static CapMachine.Wpf.Models.ComEnum; namespace CapMachine.Wpf.Services { @@ -18,10 +21,10 @@ namespace CapMachine.Wpf.Services CurUserDto = new UserDto(); EventAggregator = eventAggregator; - + DialogService = dialogService; } - + /// /// Csv文件锁 @@ -65,6 +68,31 @@ namespace CapMachine.Wpf.Services /// public int ChartRtDataCacheTimeSec { get; set; } = 3600_8; + /// + /// CAN和LIN的运行状态模型 + /// + public CanLinRunStateModel CanLinRunStateModel { get; set; } = new CanLinRunStateModel(); + + + private int _PlcCycleTime; + /// + /// PLC循环时间 + /// + public int PlcCycleTime + { + get { return _PlcCycleTime; } + set + { + if (value!= _PlcCycleTime) + { + _PlcCycleTime = value; + RaisePropertyChanged(); + } + + } + } + + private HistoryExp _CurExpInfo; /// @@ -109,7 +137,7 @@ namespace CapMachine.Wpf.Services public PPCService PPCService { get; } public IDialogService DialogService { get; } - + diff --git a/CapMachine.Wpf/Services/DialogExtensions.cs b/CapMachine.Wpf/Services/DialogExtensions.cs new file mode 100644 index 0000000..0af8f10 --- /dev/null +++ b/CapMachine.Wpf/Services/DialogExtensions.cs @@ -0,0 +1,75 @@ +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 会话窗口扩展服务 + /// + public static class DialogExtensions + { + /// + /// 询问窗口 + /// + /// + /// 提示消息 + /// 会话ID + /// + public static async Task Question(this IHostDialogService hostDialogService, + string message, + string IdentifierName) + { + return await Question(hostDialogService, "确定", message, IdentifierName); + } + + /// + /// 询问窗口-指定标题 + /// + /// + /// 标题 + /// 提示消息 + /// 会话ID + /// + public static async Task Question(this IHostDialogService hostDialogService, + string title, + string message, + string IdentifierName) + { + DialogParameters param = new DialogParameters(); + param.Add("Title", title); + param.Add("Message", message); + + var dialogResult = await hostDialogService.ShowDialogAsync("AppViews.HostMessageBox", param, IdentifierName); + + return dialogResult.Result == ButtonResult.OK; + } + + /// + /// 询问窗口 + /// + /// + /// 标题 + /// 提示消息 + /// + public static bool Question(this IDialogService dialogService, string title, string message) + { + if (string.IsNullOrWhiteSpace(title)) + title = "确定"; + + DialogParameters parameters = new DialogParameters(); + parameters.Add("Title", title); + parameters.Add("Message", message); + + bool dialogResult = false; + dialogService.ShowDialog("AppViews.MessageBox", parameters, callback => + { + dialogResult = callback.Result == ButtonResult.OK; + }); + return dialogResult; + } + } +} diff --git a/CapMachine.Wpf/Services/DialogHostService.cs b/CapMachine.Wpf/Services/DialogHostService.cs new file mode 100644 index 0000000..58746aa --- /dev/null +++ b/CapMachine.Wpf/Services/DialogHostService.cs @@ -0,0 +1,108 @@ +using MaterialDesignThemes.Wpf; +using Prism.Common; +using Prism.Ioc; +using Prism.Mvvm; +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace CapMachine.Wpf.Services +{ + /// + /// 对话主机服务 + /// + public class DialogHostService : DialogService, IHostDialogService + { + private readonly IContainerExtension _containerExtension; + + public DialogHostService(IContainerExtension containerExtension) : base(containerExtension) + { + _containerExtension = containerExtension; + } + + public IDialogResult ShowWindow(string name) + { + IDialogResult dialogResult = new DialogResult(ButtonResult.None); + + var content = _containerExtension.Resolve(name); + + if (!(content is Window dialogContent)) + throw new NullReferenceException("A dialog's content must be a Window"); + + if (dialogContent is Window view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) + ViewModelLocator.SetAutoWireViewModel(view, true); + + if (!(dialogContent.DataContext is IDialogAware viewModel)) + throw new NullReferenceException("A dialog's ViewModel must implement the IDialogAware interface"); + + if (dialogContent is IDialogWindow dialogWindow) + { + ConfigureDialogWindowEvents(dialogWindow, result => { dialogResult = result; }); + } + + MvvmHelpers.ViewAndViewModelAction(viewModel, d => d.OnDialogOpened(null)); + dialogContent.ShowDialog(); + return dialogResult; + } + + public async Task ShowDialogAsync(string name, IDialogParameters parameters = null, string IdentifierName = "Root") + { + var dialogContent = GetDialogContent(name, IdentifierName); + + if (!(dialogContent.DataContext is IHostDialogAware viewModel)) + throw new NullReferenceException("A dialog's ViewModel must implement the IDialogHostAware interface"); + + var eventHandler = GetDialogOpenedEventHandler(viewModel, parameters); + + var dialogResult = await DialogHost.Show(dialogContent, IdentifierName, eventHandler); + + if (dialogResult == null) + return new DialogResult(ButtonResult.Cancel); + + return (IDialogResult)dialogResult; + } + + private FrameworkElement GetDialogContent(string name, string IdentifierName = "Root") + { + var content = _containerExtension.Resolve(name); + if (!(content is FrameworkElement dialogContent)) + throw new NullReferenceException("A dialog's content must be a FrameworkElement"); + + if (dialogContent is FrameworkElement view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) + ViewModelLocator.SetAutoWireViewModel(view, true); + + if (!(dialogContent.DataContext is IHostDialogAware viewModel)) + throw new NullReferenceException("A dialog's ViewModel must implement the IDialogHostAware interface"); + + viewModel.IdentifierName = IdentifierName; + + return dialogContent; + } + + private DialogOpenedEventHandler GetDialogOpenedEventHandler(IHostDialogAware viewModel, + IDialogParameters parameters) + { + if (parameters == null) parameters = new DialogParameters(); + + DialogOpenedEventHandler eventHandler = + (sender, eventArgs) => + { + var _content = eventArgs.Session.Content; + if (viewModel is IHostDialogAware aware) + aware.OnDialogOpened(parameters); + eventArgs.Session.UpdateContent(_content); + }; + + return eventHandler; + } + + public void Close(string IdentifierName, DialogResult dialogResult) + { + DialogHost.Close(IdentifierName, dialogResult); + } + } +} diff --git a/CapMachine.Wpf/Services/IAppStartService.cs b/CapMachine.Wpf/Services/IAppStartService.cs new file mode 100644 index 0000000..fcdd66f --- /dev/null +++ b/CapMachine.Wpf/Services/IAppStartService.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// App启动服务接口 + /// + public interface IAppStartService + { + void CreateShell(); + + void Logout(); + + void Exit(); + } +} diff --git a/CapMachine.Wpf/Services/IAppTaskBar.cs b/CapMachine.Wpf/Services/IAppTaskBar.cs new file mode 100644 index 0000000..385de6f --- /dev/null +++ b/CapMachine.Wpf/Services/IAppTaskBar.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + public interface IAppTaskBar + { + void Initialization(); + + void Dispose(); + } +} diff --git a/CapMachine.Wpf/Services/IApplicationContext.cs b/CapMachine.Wpf/Services/IApplicationContext.cs new file mode 100644 index 0000000..68b3935 --- /dev/null +++ b/CapMachine.Wpf/Services/IApplicationContext.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + public interface IApplicationContext + { + //[CanBeNull] + //TenantInformation CurrentTenant { get; } + + //AbpUserConfigurationDto Configuration { get; set; } + + //GetCurrentLoginInformationsOutput LoginInfo { get; } + + //void ClearLoginInfo(); + + //void SetLoginInfo(GetCurrentLoginInformationsOutput loginInfo); + + //void SetAsHost(); + + //void SetAsTenant(string tenancyName, int tenantId); + + //LanguageInfo CurrentLanguage { get; set; } + + //void Load(TenantInformation currentTenant, GetCurrentLoginInformationsOutput loginInfo); + } +} diff --git a/CapMachine.Wpf/Services/IHostDialogAware.cs b/CapMachine.Wpf/Services/IHostDialogAware.cs new file mode 100644 index 0000000..32c0459 --- /dev/null +++ b/CapMachine.Wpf/Services/IHostDialogAware.cs @@ -0,0 +1,37 @@ +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 对话主机ViewModel基类 + /// + public interface IHostDialogAware + { + /// + /// DialogHost顶级节点 + /// + string IdentifierName { get; set; } + + /// + /// 页面初始化前传递参数事件 + /// + /// + /// + void OnDialogOpened(IDialogParameters parameters); + + /// + /// 确认 + /// + Task Save(); + + /// + /// 取消 + /// + void Cancel(); + } +} diff --git a/CapMachine.Wpf/Services/IHostDialogService.cs b/CapMachine.Wpf/Services/IHostDialogService.cs new file mode 100644 index 0000000..05ecc3a --- /dev/null +++ b/CapMachine.Wpf/Services/IHostDialogService.cs @@ -0,0 +1,31 @@ +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// 对话主机服务接口 + /// + public interface IHostDialogService : IDialogService + { + /// + /// 显示Dialog + /// + /// + /// + /// + /// + Task ShowDialogAsync( + string name, + IDialogParameters parameters = null, + string IdentifierName = "Root"); + + IDialogResult ShowWindow(string name); + + void Close(string IdentifierName, DialogResult dialogResult); + } +} diff --git a/CapMachine.Wpf/Services/LinDriveService.cs b/CapMachine.Wpf/Services/LinDriveService.cs new file mode 100644 index 0000000..08063a1 --- /dev/null +++ b/CapMachine.Wpf/Services/LinDriveService.cs @@ -0,0 +1,273 @@ +using CapMachine.Model.CANLIN; +using CapMachine.Wpf.LinDrive; +using ImTools; +using Prism.Ioc; +using Prism.Mvvm; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.Services +{ + /// + /// Lin驱动服务 + /// + public class LinDriveService : BindableBase + { + public HighSpeedDataService HighSpeedDataService { get; } + + /// + /// 实例化函数 + /// + public LinDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider) + { + ToomossLinDrive = new ToomossLin(containerProvider); + //高速数据服务 + HighSpeedDataService = highSpeedDataService; + + //ToomossLinDrive.StartLinDrive(); + } + + /// + /// 当前选中的CanLinConfigPro 程序 + /// + public CanLinConfigPro SelectedCanLinConfigPro { get; set; } + + + /// + /// 图莫斯 CAN Drive + /// ToomossLinDrive + /// + public ToomossLin ToomossLinDrive { get; set; } + + /// + /// Ldf消息集合 + /// 包括读取的实时值和数据 + /// + public ObservableCollection ListLinLdfModel { get; set; } = new ObservableCollection(); + + /// + /// 初始化CAN的配置信息 + /// + public void InitLinConfig(CanLinConfigPro selectedLinLinConfigPro) + { + //赋值配置数据 + SelectedCanLinConfigPro = selectedLinLinConfigPro; + //为DBC实时数据关联配置的名称 + foreach (var item in SelectedCanLinConfigPro.CanLinConfigContents) + { + var FindData = ListLinLdfModel.FindFirst(a => a.SignalName == item.SignalName); + if (FindData != null) + { + FindData.Name = item.Name; + } + } + } + + /// + /// 开始DBC 配置文件 加载 + /// + /// + public ObservableCollection StartLdf(string Path) + { + ListLinLdfModel = ToomossLinDrive.StartLdf(Path); + return ListLinLdfModel; + } + + + #region 程序驱动CAN + + /// + /// 转速 指令数据 实例 + /// + private LinCmdData SpeedLinCmdData { get; set; } + + /// + /// 功率限制 指令数据 实例 + /// + private LinCmdData PwLimitLinCmdData { get; set; } + + /// + /// 使能 指令数据 实例 + /// + private LinCmdData EnableLinCmdData { get; set; } + + /// + /// 要发送的CAN指令数据 + /// 在程序配置好后就确定要发送哪些数据 + /// + public List CmdData { get; set; } = new List(); + + /// + /// 增加发送的指令数据 + /// + /// + public void AddCmdData(LinCmdData SendLinCmdData) + { + //提取常用的实例数据 + switch (SendLinCmdData.ConfigName) + { + case "转速": + SpeedLinCmdData = SendLinCmdData; + break; + case "功率限制": + PwLimitLinCmdData = SendLinCmdData; + break; + case "使能": + EnableLinCmdData = SendLinCmdData; + break; + case "Anti_Sleep": + //SpeedLinCmdData = SendLinCmdData; + break; + default: + break; + } + //添加到发送数据集合 + CmdData.Add(SendLinCmdData); + } + + + /// + /// 更新速度信息 + /// 默认是启动 + /// + /// + public void UpdateSpeedCmdData(double SpeedData) + { + if (SpeedLinCmdData != null) + { + SpeedLinCmdData.SignalCmdValue = SpeedData; + } + if (EnableLinCmdData != null) + { + EnableLinCmdData.SignalCmdValue = 1; + } + } + + + /// + /// 发送消息给CAN 驱动 + /// + public void SendMsgToLinDrive(double SpeedData) + { + if (ToomossLinDrive.OpenState) + { + if (CmdData.Count > 0) + { + //更新速度信息 + UpdateSpeedCmdData(SpeedData); + + ToomossLinDrive.SendLinMsg(CmdData); + } + else + { + System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + } + else + { + System.Windows.MessageBox.Show("未打开CAN通信,无法发送数据", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + } + + + /// + /// 循环发送数据到CAN + /// + public void CycleSendMsg() + { + if (ToomossLinDrive.OpenState) + { + if (ToomossLinDrive.IsCycleSend == false) + { + if (CmdData.Count > 0) + { + ToomossLinDrive.IsCycleSend = true; + ToomossLinDrive.CmdData = CmdData; + ToomossLinDrive.StartCycleSendMsg(); + } + else + { + System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + } + else + { + ToomossLinDrive.IsCycleSend = false; + } + + } + } + + + + /// + ///循环接收数据 + /// + public void CycleReciveMsg() + { + if (ToomossLinDrive.OpenState) + { + if (ToomossLinDrive.IsCycleRevice == false) + { + if (ListLinLdfModel.Count > 0) + { + ToomossLinDrive.IsCycleRevice = true; + ToomossLinDrive.StartCycleReviceMsg(); + } + else + { + System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + } + else + { + ToomossLinDrive.IsCycleRevice = false; + } + } + } + + + /// + /// 获取数据值 + /// 从DBC中获取数据给数据中心集合 + /// + /// + /// + public double GetLdfValueByName(string Name) + { + if (!ToomossLinDrive.IsCycleRevice) return 0; + + if (ListLinLdfModel.Any(a => a.Name == Name)) + { + //double.TryParse(ListLinLdfModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); + return double.TryParse(ListLinLdfModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + } + return 0; + } + + /// + /// 速度的数据的获取 + /// 获取速度数据值 + /// 从DBC中获取Speed数据给数据中心集合 + /// + /// + /// + public double GetLdfSpeedValueBySpeedName(string Name) + { + if (!ToomossLinDrive.IsCycleRevice) return 0; + + if (ListLinLdfModel.Any(a => a.Name == Name)) + { + //double.TryParse(ListLinLdfModel.FindFirst(a => a.Name == Name).SignalRtValue, out double Result1); + return double.TryParse(ListLinLdfModel.FindFirst(a => a.Name == Name).SignalRtValue.Split(" ")[0], out double Result) == true ? Result : 0; + } + return 0; + } + + #endregion + } +} diff --git a/CapMachine.Wpf/Services/MachineRtDataService.cs b/CapMachine.Wpf/Services/MachineRtDataService.cs index 0653605..6c68c5e 100644 --- a/CapMachine.Wpf/Services/MachineRtDataService.cs +++ b/CapMachine.Wpf/Services/MachineRtDataService.cs @@ -36,7 +36,9 @@ namespace CapMachine.Wpf.Services /// private IEventAggregator _EventAggregator { get; set; } public AlarmService AlarmService { get; } + public ConfigService ConfigService { get; } public CanDriveService CanDriveService { get; } + public LinDriveService LinDriveService { get; } public SysRunService SysRunService { get; } /// @@ -74,10 +76,10 @@ namespace CapMachine.Wpf.Services /// private bool IsValueShow { get; set; } = true; - ///// - ///// 仪表数据集合 - ///// - //public List ListMeterRtData { get; set; } + /// + /// 系统拓展数据 + /// + public SysExdInfo CurSysExdInfo { get; set; } ///// ///// Tag数据集合 @@ -108,7 +110,8 @@ namespace CapMachine.Wpf.Services /// 实例化函数 /// /// - public MachineRtDataService(IEventAggregator eventAggregator, AlarmService alarmService, CanDriveService canDriveService, SysRunService sysRunService)//, AlarmService alarmService + public MachineRtDataService(IEventAggregator eventAggregator, AlarmService alarmService, ConfigService configService, + CanDriveService canDriveService, LinDriveService linDriveService, SysRunService sysRunService)//, AlarmService alarmService { //ConcurrentDictionary keyValuePairs = new ConcurrentDictionary(); @@ -122,7 +125,9 @@ namespace CapMachine.Wpf.Services //事件服务 _EventAggregator = eventAggregator; AlarmService = alarmService; + ConfigService = configService; CanDriveService = canDriveService; + LinDriveService = linDriveService; SysRunService = sysRunService; //秒触发一次 @@ -132,6 +137,7 @@ namespace CapMachine.Wpf.Services CycleTimer.Enabled = true; + #region 标签管理 //【测试】 @@ -637,7 +643,7 @@ namespace CapMachine.Wpf.Services Name = "通讯母线电压[V]",//名称带单位 NameNoUnit = "通讯母线电压",//无单位名称 EnName = "ComCapBusVol",//英文名称 - Group = "CAN",//分组 + Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "V", @@ -656,7 +662,7 @@ namespace CapMachine.Wpf.Services Name = "通讯母线电流[A]",//名称带单位 NameNoUnit = "通讯母线电流",//无单位名称 EnName = "ComCapBusCur",//英文名称 - Group = "CAN",//分组 + Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "A", @@ -675,7 +681,7 @@ namespace CapMachine.Wpf.Services Name = "通讯相电流[A]",//名称带单位 NameNoUnit = "通讯相电流",//无单位名称 EnName = "ComCapPhCur",//英文名称 - Group = "CAN",//分组 + Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "A", @@ -694,7 +700,7 @@ namespace CapMachine.Wpf.Services Name = "通讯功率[W]",//名称带单位 NameNoUnit = "通讯功率",//无单位名称 EnName = "ComCapPw",//英文名称 - Group = "CAN",//分组 + Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "W", @@ -713,7 +719,7 @@ namespace CapMachine.Wpf.Services Name = "通讯芯片温度[℃]",//名称带单位 NameNoUnit = "通讯芯片温度",//无单位名称 EnName = "ComCapChipTemp",//英文名称 - Group = "CAN",//分组 + Group = "CANLIN",//分组 MinValue = 0, MaxValue = 100, Unit = "℃", @@ -858,7 +864,10 @@ namespace CapMachine.Wpf.Services InitialPLCCom(); - PubRtDataStart(); + //拓展的参数信息 + CurSysExdInfo = new SysExdInfo(SiemensDrive); + + //PubRtDataStart(); } @@ -1060,6 +1069,11 @@ namespace CapMachine.Wpf.Services /// private OperateResult OperateResultAlarm { get; set; } + /// + /// 时间诊断 + /// + private Stopwatch DiagnosticsTime { get; set; } = new Stopwatch(); + /// /// PLC扫描线程 /// @@ -1071,10 +1085,11 @@ namespace CapMachine.Wpf.Services while (ThreadEnable) { - await Task.Delay(10); + //await Task.Delay(5); + await Task.CompletedTask; - //DiagnosticsTime.Reset(); - //DiagnosticsTime.Start(); + DiagnosticsTime.Reset(); + DiagnosticsTime.Start(); try { //TagInfo.RtValue.Value++; @@ -1114,13 +1129,34 @@ namespace CapMachine.Wpf.Services TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.IsShow = IsValueShow; ////仿真数据 - ////TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100); - ////TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; - ////LinkState = false; + //TagManger.GetTagInfoValueByName(itemTag.Value.Name)!.Value = (short)Random.Next(1, 100); + //TagManger.GetTagByName(itemTag.Value.Name).EngPvValue = (short)Random.Next(1, 100) * 1.0 / TagManger.GetTagByName(itemTag.Value.Name)!.Precision; + //LinkState = false; //PLC 数据 if (!string.IsNullOrEmpty(itemTag.Value.PVAddress)) { + //反写CANLIN速度数据到PLC,提前写入PLC,后面会回读PV值 + if (itemTag.Value.NameNoUnit == "转速") + { + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) + { + case CanLinEnum.Can: + //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC + SiemensDrive.Write(itemTag.Value.PVAddress, (short)CanDriveService.GetDbcSpeedValueBySpeedName("通讯转速")); + //itemTag.Value.EngPvValue = 0; + break; + case CanLinEnum.Lin: + //通信转速 Dbc中间配置名称的转速数据读取出来 给PLC + SiemensDrive.Write(itemTag.Value.PVAddress, (short)LinDriveService.GetLdfSpeedValueBySpeedName("通讯转速")); + //itemTag.Value.EngPvValue = 0; + break; + default: + break; + } + + } + OperateResultShort = SiemensDrive.ReadInt16(itemTag.Value.PVAddress); if (OperateResultShort.IsSuccess) { @@ -1133,17 +1169,34 @@ namespace CapMachine.Wpf.Services LinkState = false; } - //CAN数据读取 //回读CAN通信的数据到集合中 - //CAN组合并且在循环接收数据中时,才读取数据 - if (itemTag.Value.Group == "CAN") + //根据CANLIN的选择,读取对应的解析实时数据更新到数据中心,这些数据相当于都是PV的实时数据 + switch (ConfigService.CanLinRunStateModel.CurSysSelectedCanLin) { - //回读CAN通信的DBC集合数据到集合中 - itemTag.Value.EngPvValue = CanDriveService.GetDbcValueByName(itemTag.Value.NameNoUnit); + case CanLinEnum.Can: + //CAN数据读取 //回读CAN通信的数据到集合中 + //CAN组合并且在循环接收数据中时,才读取数据 + if (itemTag.Value.Group == "CANLIN") + { + //回读CAN通信的DBC集合数据到集合中 + itemTag.Value.EngPvValue = CanDriveService.GetDbcValueByName(itemTag.Value.NameNoUnit); + } + break; + case CanLinEnum.Lin: + //LIN数据读取 //回读LIN通信的数据到集合中 + //LIN组合并且在循环接收数据中时,才读取数据 + if (itemTag.Value.Group == "CANLIN") + { + //回读LIN通信的DBC集合数据到集合中 + itemTag.Value.EngPvValue = LinDriveService.GetLdfValueByName(itemTag.Value.NameNoUnit); + } + break; + default: + break; } } else //地址为空,PLC驱动不读取数据 { - + } if (!string.IsNullOrEmpty(itemTag.Value.SVAddress)) @@ -1207,7 +1260,6 @@ namespace CapMachine.Wpf.Services } } - //循环读取手自动切换 foreach (var item in ListHandSwitchData) { @@ -1218,7 +1270,12 @@ namespace CapMachine.Wpf.Services } } - + //拓展信息的展示 + foreach (var itemQuickTag in CurSysExdInfo.QuickTags) + { + itemQuickTag.OperateResultSource = SiemensDrive.Read(itemQuickTag.ValueAddress, itemQuickTag.ByteLength); + } + CurSysExdInfo.SumRunTime(); } catch (Exception ex) @@ -1227,9 +1284,9 @@ namespace CapMachine.Wpf.Services } - - //DiagnosticsTime.Stop(); - //ScanRtTimeinfo = $"电表:{DiagnosticsTime.Elapsed.TotalMilliseconds.ToString()}"; + DiagnosticsTime.Stop(); + ConfigService.PlcCycleTime = (int)DiagnosticsTime.Elapsed.TotalMilliseconds; + //Console.WriteLine($"扫描时间:{DiagnosticsTime.Elapsed.TotalMilliseconds.ToString()}"); } }); } diff --git a/CapMachine.Wpf/Services/NavigationMenuService.cs b/CapMachine.Wpf/Services/NavigationMenuService.cs index 60c86cd..db0c4eb 100644 --- a/CapMachine.Wpf/Services/NavigationMenuService.cs +++ b/CapMachine.Wpf/Services/NavigationMenuService.cs @@ -73,6 +73,7 @@ namespace CapMachine.Wpf.Services //})); MenuItems.Add(new NavigationItem("", "工艺过程", "MonitorView")); MenuItems.Add(new NavigationItem("", "CAN配置", "CANConfigView")); + MenuItems.Add(new NavigationItem("", "LIN配置", "LINConfigView")); MenuItems.Add(new NavigationItem("", "工艺参数", "ProConfigView")); MenuItems.Add(new NavigationItem("", "工艺曲线", "RealTimeChartView")); MenuItems.Add(new NavigationItem("", "动作日志", "ActionLogView")); diff --git a/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs b/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs index e85168b..3e84ca2 100644 --- a/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs +++ b/CapMachine.Wpf/ViewModels/ActionLogViewModel.cs @@ -42,7 +42,7 @@ namespace CapMachine.Wpf.ViewModels CategoryComboBoxList = new List() { new ComboBoxModel(){Key="0",Text="系统日志" }, - new ComboBoxModel(){Key="1",Text="程序步骤" }, + //new ComboBoxModel(){Key="1",Text="程序步骤" }, new ComboBoxModel(){Key="2",Text="历史报警" }, }; } @@ -210,12 +210,14 @@ namespace CapMachine.Wpf.ViewModels //多条件查询 if (!string.IsNullOrEmpty(SearchStartDate)) { - MulConHistoryAlarmQueryable = MulConHistoryAlarmQueryable.Where(t => t.CreateTime.Date >= Convert.ToDateTime(SearchStartDate)); + var Start = DateTime.Parse(SearchStartDate); + MulConHistoryAlarmQueryable = MulConHistoryAlarmQueryable.Where(t => t.CreateTime.Date >= Convert.ToDateTime(Start)); } //多条件查询 if (!string.IsNullOrEmpty(SearchEndDate)) { - MulConHistoryAlarmQueryable = MulConHistoryAlarmQueryable.Where(t => t.CreateTime.Date < Convert.ToDateTime(SearchEndDate).AddDays(1)); + var End = DateTime.Parse(SearchEndDate); + MulConHistoryAlarmQueryable = MulConHistoryAlarmQueryable.Where(t => t.CreateTime.Date < Convert.ToDateTime(End).AddDays(1)); } var ListHistoryAlarmDpI = MulConHistoryAlarmQueryable.OrderByDescending(a => a.CreateTime).ToList();//.Where(a => a.CreateTime >= DateTime.Now); @@ -228,12 +230,14 @@ namespace CapMachine.Wpf.ViewModels //多条件查询 if (!string.IsNullOrEmpty(SearchStartDate)) { - MulConActionLogQueryable = MulConActionLogQueryable.Where(t => t.CreateTime.Date >= Convert.ToDateTime(SearchStartDate)); + var Start = DateTime.Parse(SearchStartDate); + MulConActionLogQueryable = MulConActionLogQueryable.Where(t => t.CreateTime.Date >= Convert.ToDateTime(Start)); } //多条件查询 if (!string.IsNullOrEmpty(SearchEndDate)) { - MulConActionLogQueryable = MulConActionLogQueryable.Where(t => t.CreateTime.Date < Convert.ToDateTime(SearchEndDate).AddDays(1)); + var End = DateTime.Parse(SearchEndDate); + MulConActionLogQueryable = MulConActionLogQueryable.Where(t => t.CreateTime.Date < Convert.ToDateTime(End).AddDays(1)); } var ListActionLogDpI = MulConActionLogQueryable.OrderByDescending(a => a.CreateTime).ToList();//.Where(a => a.CreateTime >= DateTime.Now); ListModelDto = new ObservableCollection(Mapper.Map>(ListActionLogDpI)); diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs index 3eb0359..01da499 100644 --- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs +++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs @@ -25,6 +25,7 @@ using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; +using static CapMachine.Wpf.Models.ComEnum; namespace CapMachine.Wpf.ViewModels { @@ -35,6 +36,7 @@ namespace CapMachine.Wpf.ViewModels { public CANConfigViewModel(IDialogService dialogService, IFreeSql freeSql, IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService, + ComActionService actionService, ConfigService configService, CanDriveService canDriveService, IMapper mapper, MachineRtDataService machineRtDataService) { @@ -43,6 +45,7 @@ namespace CapMachine.Wpf.ViewModels EventAggregator = eventAggregator; RegionManager = regionManager; SysRunService = sysRunService; + ComActionService = actionService; ConfigService = configService; CanDriveService = canDriveService; Mapper = mapper; @@ -80,6 +83,7 @@ namespace CapMachine.Wpf.ViewModels public IEventAggregator EventAggregator { get; } public IRegionManager RegionManager { get; } public SysRunService SysRunService { get; } + public ComActionService ComActionService { get; } public ConfigService ConfigService { get; } public CanDriveService CanDriveService { get; } public IMapper Mapper { get; } @@ -329,23 +333,42 @@ namespace CapMachine.Wpf.ViewModels } break; case "Active": - if (SelectCanLinConfigPro != null) + + //激活到取消的状态的判断 + if (IsCanConfigProActive==true) { //控件的激活 IsCanConfigProActive = !IsCanConfigProActive; //控件的激活配置信息 IsCANConfigDatagridActive = !IsCanConfigProActive; - //当前使用的CAN 配置信息 - CanDriveService.InitCanConfig(SelectCanLinConfigPro); + return; + } + + if ((CanDriveService.ToomossCanDrive.OpenState == true && CanDriveService.ToomossCanDrive.DbcParserState == true)) + { + if (SelectCanLinConfigPro != null) + { + //控件的激活 + IsCanConfigProActive = !IsCanConfigProActive; + //控件的激活配置信息 + IsCANConfigDatagridActive = !IsCanConfigProActive; + + //当前使用的CAN 配置信息 + CanDriveService.InitCanConfig(SelectCanLinConfigPro); + + InitLoadCanConfigPro(); + } + else + { + System.Windows.MessageBox.Show("选中后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } - InitLoadCanConfigPro(); } else { - System.Windows.MessageBox.Show("选中后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("请确保CAN连接打开和Dbc解析成功后再激活", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } - break; default: break; @@ -579,7 +602,7 @@ namespace CapMachine.Wpf.ViewModels } else { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } @@ -754,10 +777,17 @@ namespace CapMachine.Wpf.ViewModels switch (Par) { case "Open": + if (ComActionService.IsCanToDoWork()==false) + { + System.Windows.MessageBox.Show("请关闭LIN连接后才能开启CAN,同一个时刻只能有一个通信驱动压缩机", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + return; + } if (SelectCanLinConfigPro != null && SelectedCANConfigExdDto != null) { //打开连接 CanDriveService.ToomossCanDrive.StartCanDrive(); + //系统使用了CAN + ConfigService.CanLinRunStateModel.CurSysSelectedCanLin = CanLinEnum.Can; //CAN DBC配置 有DBC配置的话,则直接加载DBC信息 if (!string.IsNullOrEmpty(SelectCanLinConfigPro.CANConfigExd.DbcPath)) { @@ -767,7 +797,7 @@ namespace CapMachine.Wpf.ViewModels } else { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } break; @@ -776,11 +806,12 @@ namespace CapMachine.Wpf.ViewModels { CanDriveService.ToomossCanDrive.CloseDevice(); - + //系统取消使用了CAN + ConfigService.CanLinRunStateModel.CurSysSelectedCanLin = CanLinEnum.No; } else { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } break; @@ -802,7 +833,7 @@ namespace CapMachine.Wpf.ViewModels } else { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } break; @@ -837,7 +868,7 @@ namespace CapMachine.Wpf.ViewModels } else { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); } break; @@ -1004,7 +1035,7 @@ namespace CapMachine.Wpf.ViewModels { if (SelectCanLinConfigPro == null) { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); return; } @@ -1139,7 +1170,7 @@ namespace CapMachine.Wpf.ViewModels { if (SelectCanLinConfigPro == null) { - System.Windows.MessageBox.Show("新建CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + System.Windows.MessageBox.Show("选中CAN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); return; } diff --git a/CapMachine.Wpf/ViewModels/DialogCanLinConfigCreateViewModel.cs b/CapMachine.Wpf/ViewModels/DialogCanLinConfigCreateViewModel.cs index 12a847e..8c6aac2 100644 --- a/CapMachine.Wpf/ViewModels/DialogCanLinConfigCreateViewModel.cs +++ b/CapMachine.Wpf/ViewModels/DialogCanLinConfigCreateViewModel.cs @@ -16,7 +16,7 @@ namespace CapMachine.Wpf.ViewModels { public DialogCanLinConfigCreateViewModel() { - + this.Title = "Can/LIN程序名称配置"; } private string name; diff --git a/CapMachine.Wpf/ViewModels/HostDialogViewModel.cs b/CapMachine.Wpf/ViewModels/HostDialogViewModel.cs new file mode 100644 index 0000000..d3a6c02 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/HostDialogViewModel.cs @@ -0,0 +1,60 @@ +using CapMachine.Wpf.Services; +using Prism.Commands; +using Prism.Mvvm; +using Prism.Services.Dialogs; +using Prism.Ioc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CapMachine.Wpf.ViewModels +{ + public abstract class HostDialogViewModel : BindableBase, IHostDialogAware + { + public string Title { get; set; } + + public string IdentifierName { get; set; } + + public DelegateCommand SaveCommand { get; private set; } + + public DelegateCommand CancelCommand { get; private set; } + + private IHostDialogService dialogService; + + public HostDialogViewModel() + { + SaveCommand = new DelegateCommand(async () => await Save()); + CancelCommand = new DelegateCommand(Cancel); + + dialogService = ContainerLocator.Container.Resolve(); + } + + public virtual void Cancel() + { + dialogService.Close(IdentifierName, new DialogResult(ButtonResult.No)); + } + + public virtual async Task Save() + { + dialogService.Close(IdentifierName, new DialogResult(ButtonResult.OK)); + await Task.CompletedTask; + } + + protected virtual void Save(object value) + { + DialogParameters param = new DialogParameters(); + param.Add("Value", value); + + dialogService.Close(IdentifierName, new DialogResult(ButtonResult.OK, param)); + } + + protected virtual void Save(DialogParameters param) + { + dialogService.Close(IdentifierName, new DialogResult(ButtonResult.OK, param)); + } + + public abstract void OnDialogOpened(IDialogParameters parameters); + } +} diff --git a/CapMachine.Wpf/ViewModels/LinConfigViewModel.cs b/CapMachine.Wpf/ViewModels/LinConfigViewModel.cs new file mode 100644 index 0000000..c54ff3b --- /dev/null +++ b/CapMachine.Wpf/ViewModels/LinConfigViewModel.cs @@ -0,0 +1,1224 @@ +using AutoMapper; +using CapMachine.Core; +using CapMachine.Model.CANLIN; +using CapMachine.Wpf.CanDrive; +using CapMachine.Wpf.Dtos; +using CapMachine.Wpf.LinDrive; +using CapMachine.Wpf.Services; +using Prism.Commands; +using Prism.Events; +using Prism.Regions; +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using Microsoft.Win32; +using static CapMachine.Wpf.Models.ComEnum; + +namespace CapMachine.Wpf.ViewModels +{ + public class LinConfigViewModel : NavigationViewModel + { + /// + /// 实例化函数 + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public LinConfigViewModel(IDialogService dialogService, IFreeSql freeSql, + IEventAggregator eventAggregator, IRegionManager regionManager, SysRunService sysRunService, + ConfigService configService, LinDriveService linDriveService,ComActionService comActionService, + IMapper mapper, MachineRtDataService machineRtDataService) + { + //LogService = logService; + FreeSql = freeSql; + EventAggregator = eventAggregator; + RegionManager = regionManager; + SysRunService = sysRunService; + ConfigService = configService; + LinDriveService = linDriveService; + ComActionService = comActionService; + Mapper = mapper; + this.MachineRtDataService = machineRtDataService; + + //MachineDataService = machineDataService; + DialogService = dialogService; + + WriteNameCbxItems = new ObservableCollection() + { + new CbxItems(){ Key="转速",Text="转速"}, + new CbxItems(){ Key="功率限制",Text="功率限制"}, + new CbxItems(){ Key="使能",Text="使能"}, + new CbxItems(){ Key="Anti_Sleep",Text="Anti_Sleep"}, + }; + + ReadNameCbxItems = new ObservableCollection() + { + new CbxItems(){ Key="通讯转速",Text="通讯转速"}, + new CbxItems(){ Key="通讯母线电压",Text="通讯母线电压"}, + new CbxItems(){ Key="通讯母线电流",Text="通讯母线电流"}, + new CbxItems(){ Key="通讯相电流",Text="通讯相电流"}, + new CbxItems(){ Key="通讯功率",Text="通讯功率"}, + new CbxItems(){ Key="通讯芯片温度",Text="通讯芯片温度"}, + }; + InitLoadLinConfigPro(); + + } + + + /// + /// FreeSQL 实例函数 + /// + public IFreeSql FreeSql { get; } + public IEventAggregator EventAggregator { get; } + public IRegionManager RegionManager { get; } + public SysRunService SysRunService { get; } + public ConfigService ConfigService { get; } + public LinDriveService LinDriveService { get; } + public ComActionService ComActionService { get; } + public IMapper Mapper { get; } + private MachineRtDataService MachineRtDataService { get; } + + /// + /// 弹窗服务 + /// + public IDialogService DialogService { get; } + + + + #region LinConfigPro + + /// + /// 初始化j加载执行方法 + /// + private void InitLoadLinConfigPro() + { + //LIN配置集合数据 + canLinConfigPros = FreeSql.Select().Where(a => a.CANLINInfo == CANLIN.LIN) + .Include(a => a.LINConfigExd) + .IncludeMany(a => a.CanLinConfigContents) + .ToList(); + + ListCanLinConfigPro = new ObservableCollection(canLinConfigPros); + if (SelectCanLinConfigPro != null) + { + SelectCanLinConfigPro = canLinConfigPros.Where(a => a.Id == SelectCanLinConfigPro.Id).FirstOrDefault()!; + + SelectedLINConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.LINConfigExd); + + var WirteData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Write).ToList(); + if (WirteData != null && WirteData.Count > 0) + { + ListWriteCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(WirteData)); + + //加载把当前的配置信息给指令 + LinDriveService.CmdData.Clear(); + foreach (var item in WirteData) + { + LinDriveService.AddCmdData(new LinCmdData() + { + ConfigName = item.Name, + MsgName = item.MsgFrameName, + SignalName = item.SignalName, + SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, + }); + //LinDriveService.CmdData.Add(new LinCmdData() + //{ + // ConfigName = item.Name, + // MsgName = item.MsgFrameName, + // SignalName = item.SignalName, + // SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, + //}); + } + + } + var ReadData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Read).ToList(); + if (ReadData != null && ReadData.Count > 0) + { + ListReadCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(ReadData)); + + + } + } + + } + + private bool _IsLinConfigProActive = false; + /// + /// LIN 配置是否被激活 + /// + public bool IsLinConfigProActive + { + get { return _IsLinConfigProActive; } + set { _IsLinConfigProActive = value; RaisePropertyChanged(); } + } + + private bool _IsLINConfigDatagridActive = true; + /// + /// LINConfigDatagrid是否被触控 + /// 关联IsLinConfigProActive 取反 + /// + public bool IsLINConfigDatagridActive + { + get { return _IsLINConfigDatagridActive; } + set { _IsLINConfigDatagridActive = value; RaisePropertyChanged(); } + } + + private string _SelectCanLinConfigProConfigName; + /// + /// 选中的 CanLinConfigPro 名称 + /// + public string SelectCanLinConfigProConfigName + { + get { return _SelectCanLinConfigProConfigName; } + set { _SelectCanLinConfigProConfigName = value; RaisePropertyChanged(); } + } + + + private DelegateCommand _CanLinConfigPromdCmd; + /// + /// LINConfigPro操作的指令 + /// + public DelegateCommand CanLinConfigPromdCmd + { + set + { + _CanLinConfigPromdCmd = value; + } + get + { + if (_CanLinConfigPromdCmd == null) + { + _CanLinConfigPromdCmd = new DelegateCommand((Par) => CanLinConfigPromdCmdMethod(Par)); + } + return _CanLinConfigPromdCmd; + } + } + /// + /// LinConfigPro操作的指令方法 + /// + /// + private void CanLinConfigPromdCmdMethod(string Par) + { + switch (Par) + { + case "Add": + //弹窗 + DialogService.ShowDialog("DialogCanLinConfigCreateView", new DialogParameters() { { "Name", "" } }, (par) => + { + if (par.Result == ButtonResult.OK) + { + //程序名称 + var ReturnValue = par.Parameters.GetValue("Name"); + + //加载默认的数据 LINConfigExd + var InsertLINConfigExd = FreeSql.Insert(new LINConfigExd() + { + BaudRate = 250, + LdfPath = "请配置LDF路径", + Cycle = 100, + }).ExecuteInserted(); + + //返回数据,刷新Chart + var InsertData = FreeSql.Insert(new CanLinConfigPro() + { + ConfigName = ReturnValue, + CANLINInfo = CANLIN.LIN, + LINConfigExdId = InsertLINConfigExd.FirstOrDefault()!.Id + }).ExecuteInserted(); + if (InsertData != null) + { + //加载默认的数据 CanLinRWConfig + FreeSql.Insert(new CanLinRWConfig() + { + SignalName = "Speed", + DefautValue = "0", + Name = "转速", + RWInfo = RW.Write, + CanLinConfigProId = InsertData.FirstOrDefault().Id + }).ExecuteInserted(); + + FreeSql.Insert(new CanLinRWConfig() + { + SignalName = "Vol", + DefautValue = "0", + Name = "电压", + RWInfo = RW.Read, + CanLinConfigProId = InsertData.FirstOrDefault().Id + + }).ExecuteInserted(); + } + + InitLoadLinConfigPro(); + + SelectCanLinConfigPro = canLinConfigPros!.Find(a => a.Id == InsertData.FirstOrDefault()!.Id); + } + else if (par.Result == ButtonResult.Cancel) + { + //取消 + + } + + }); + + break; + case "Edit": + if (SelectCanLinConfigPro != null) + { + //弹窗 + DialogService.ShowDialog("DialogCanLinConfigCreateView", new DialogParameters() { { "Name", SelectCanLinConfigPro.ConfigName } }, (par) => + { + if (par.Result == ButtonResult.OK) + { + //程序名称 + var ReturnValue = par.Parameters.GetValue("Name"); + + FreeSql.Update() + .Set(a => a.ConfigName, ReturnValue) + .Where(a => a.Id == SelectCanLinConfigPro.Id) + .ExecuteAffrows(); + + InitLoadLinConfigPro(); + + SelectCanLinConfigPro = null; + } + else if (par.Result == ButtonResult.Cancel) + { + //取消 + + } + + }); + } + else + { + System.Windows.MessageBox.Show("选中后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + break; + + case "Save": + + case "Delete": + if (SelectCanLinConfigPro != null) + { + var repo = FreeSql.GetRepository(); + repo.DbContextOptions.EnableCascadeSave = true; //关键设置 + + var DeleteData = repo.Select + .Include(a => a.LINConfigExd) + .IncludeMany(a => a.CanLinConfigContents) + .Where(a => a.Id == SelectCanLinConfigPro.Id) + .ToList(); + + repo.Delete(DeleteData); + foreach (var item in DeleteData) + { + FreeSql.Delete(item.LINConfigExdId).ExecuteAffrows(); + } + InitLoadLinConfigPro(); + } + else + { + System.Windows.MessageBox.Show("选中后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + break; + case "Active": + + //激活到取消的状态的判断 + if (IsLinConfigProActive == true) + { + //控件的激活 + IsLinConfigProActive = !IsLinConfigProActive; + //控件的激活配置信息 + IsLINConfigDatagridActive = !IsLinConfigProActive; + + return; + } + + if (LinDriveService.ToomossLinDrive.OpenState == true && LinDriveService.ToomossLinDrive.LdfParserState == true) + { + if (SelectCanLinConfigPro != null) + { + //控件的激活 + IsLinConfigProActive = !IsLinConfigProActive; + //控件的激活配置信息 + IsLINConfigDatagridActive = !IsLinConfigProActive; + + //当前使用的LIN配置信息 + LinDriveService.InitLinConfig(SelectCanLinConfigPro); + + InitLoadLinConfigPro(); + } + else + { + System.Windows.MessageBox.Show("选中后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + } + else + { + System.Windows.MessageBox.Show("请确保LIN连接打开和LDF解析成功后再激活", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + break; + default: + break; + } + } + + /// + /// LIN List集合信息 + /// + private List canLinConfigPros = new List(); + + private ObservableCollection _ListCanLinConfigPro; + /// + /// LIN 配置程序集合 ObservableCollection + /// + public ObservableCollection ListCanLinConfigPro + { + get { return _ListCanLinConfigPro; } + set { _ListCanLinConfigPro = value; RaisePropertyChanged(); } + } + + /// + /// 选中的CanLinConfigPro + /// + public CanLinConfigPro SelectCanLinConfigPro { get; set; } + + private DelegateCommand _LinConfigProGridSelectionChangedCmd; + /// + /// LIN 配置程序 选中行数据命令 + /// + public DelegateCommand LinConfigProGridSelectionChangedCmd + { + set + { + _LinConfigProGridSelectionChangedCmd = value; + } + get + { + if (_LinConfigProGridSelectionChangedCmd == null) + { + _LinConfigProGridSelectionChangedCmd = new DelegateCommand((par) => LinConfigProGridSelectionChangedCmdMethod(par)); + } + return _LinConfigProGridSelectionChangedCmd; + } + } + private void LinConfigProGridSelectionChangedCmdMethod(object par) + { + if (par == null) + { + return; + } + if (par is SelectionChangedEventArgs) + { + return; + } + + if (par is CanLinConfigPro) + { + SelectCanLinConfigPro = par as CanLinConfigPro; + + //LINConfigExdDto 数据 + SelectedLINConfigExdDto = Mapper.Map(SelectCanLinConfigPro!.LINConfigExd); + + var WirteData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Write).ToList(); + if (WirteData != null && WirteData.Count > 0) + { + ListWriteCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(WirteData)); + + //加载把当前的配置信息给指令 + LinDriveService.CmdData.Clear(); + foreach (var item in WirteData) + { + LinDriveService.AddCmdData(new LinCmdData() + { + ConfigName = item.Name, + MsgName = item.MsgFrameName, + SignalName = item.SignalName, + SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, + }); + + //LinDriveService.CmdData.Add(new LinCmdData() + //{ + // ConfigName = item.Name, + // MsgName = item.MsgFrameName, + // SignalName = item.SignalName, + // SignalCmdValue = double.TryParse(item.DefautValue, out double result) == true ? result : 0, + //}); + } + + } + var ReadData = SelectCanLinConfigPro.CanLinConfigContents!.Where(a => a.RWInfo == RW.Read).ToList(); + if (ReadData != null && ReadData.Count > 0) + { + ListReadCanLinRWConfigDto = new ObservableCollection(Mapper.Map>(ReadData)); + } + + SelectCanLinConfigProConfigName = SelectCanLinConfigPro.ConfigName; + return; + } + //先判断是否是正确的集合数据,防止DataGrid的数据源刷新导致的触发事件 + var Selecteddata = (par as SelectionChangedEventArgs)!.AddedItems[0] as CanLinConfigPro; + + if (Selecteddata != null) + { + SelectCanLinConfigPro = Selecteddata; + + SelectCanLinConfigProConfigName = SelectCanLinConfigPro.ConfigName; + + } + + + } + + + private DelegateCommand _LinConfigProGridPreviewMouseLeftButtonDownCmd; + /// + /// LIN 配置程序 选中行之前的数据命令 Preview + /// 防止LIN 打开后没有关闭就开始切换LIN 配置程序信息 + /// 要关闭后再切换 + /// + public DelegateCommand LinConfigProGridPreviewMouseLeftButtonDownCmd + { + set + { + _LinConfigProGridPreviewMouseLeftButtonDownCmd = value; + } + get + { + if (_LinConfigProGridPreviewMouseLeftButtonDownCmd == null) + { + _LinConfigProGridPreviewMouseLeftButtonDownCmd = new DelegateCommand((par) => LinConfigProGridPreviewMouseLeftButtonDownCmdMethod(par)); + } + return _LinConfigProGridPreviewMouseLeftButtonDownCmd; + } + } + /// + /// 防止LIN 打开后没有关闭就开始切换LIN 配置程序信息 + /// 要关闭后再切换 + /// + /// + private void LinConfigProGridPreviewMouseLeftButtonDownCmdMethod(object par) + { + if (par == null) + { + return; + } + if (par is System.Windows.Input.MouseButtonEventArgs) + { + var handler = par as System.Windows.Input.MouseButtonEventArgs; + + if (!LinDriveService.ToomossLinDrive.OpenState) + { + // 防止默认的行选择行为发生 + handler.Handled = false; + } + else + { + System.Windows.MessageBox.Show("关闭LIN连接后再点击切换LIN配置", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + handler.Handled = true; + } + } + } + + + #endregion + + #region Ldf操作 + + private ObservableCollection _ListLinLdfModel; + /// + /// Ldf消息集合 + /// + public ObservableCollection ListLinLdfModel + { + get { return _ListLinLdfModel; } + set { _ListLinLdfModel = value; RaisePropertyChanged(); } + } + + //private string _LdfFilePath; + ///// + ///// Ldf文件路径 + ///// + //public string LdfFilePath + //{ + // get { return _LdfFilePath; } + // set { _LdfFilePath = value; RaisePropertyChanged(); } + //} + + + private DelegateCommand _LoadLdfCmd; + /// + /// 下载Ldf文件指令 + /// + public DelegateCommand LoadLdfCmd + { + set + { + _LoadLdfCmd = value; + } + get + { + if (_LoadLdfCmd == null) + { + _LoadLdfCmd = new DelegateCommand(() => LoadLdfCmdMethod()); + } + return _LoadLdfCmd; + } + } + /// + /// 加载Ldf文件信息 + /// + private void LoadLdfCmdMethod() + { + //LdfFilePath + try + { + //var dd = ListQuickMeterStepDto; + + if (SelectCanLinConfigPro != null && SelectedLINConfigExdDto != null) + { + OpenFileDialog OpenFileDialogInfo = new OpenFileDialog(); //new一个方法 + OpenFileDialogInfo.Filter = "(*.ldf;*.ldf)|*.ldf;*.ldf|all|*.*"; //删选、设定文件显示类型 + OpenFileDialogInfo.CheckFileExists = true; + OpenFileDialogInfo.CheckPathExists = true; + + OpenFileDialogInfo.ShowDialog(); //显示打开文件的窗口 + string fileName = OpenFileDialogInfo.FileName; //获得选择的文件路径 + + SelectedLINConfigExdDto.LdfPath = fileName; + } + else + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + //System.Diagnostics.Process.Start(fileName);//打开指定路径下的文件 + } + catch (Exception ex) + { + System.Windows.MessageBox.Show("可能未选择信息", "提示", System.Windows.MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.Hand); + } + } + + + /// + /// 选中的LinLdfModel + /// + public LinLdfModel SelectedLinLdfModel { get; set; } + + private DelegateCommand _LdfGridSelectionChangedCmd; + /// + /// Ldf选中行数据命令 + /// + public DelegateCommand LdfGridSelectionChangedCmd + { + set + { + _LdfGridSelectionChangedCmd = value; + } + get + { + if (_LdfGridSelectionChangedCmd == null) + { + _LdfGridSelectionChangedCmd = new DelegateCommand((par) => LdfGridSelectionChangedCmdMethod(par)); + } + return _LdfGridSelectionChangedCmd; + } + } + private void LdfGridSelectionChangedCmdMethod(object par) + { + if (par == null) + { + return; + } + if (par is LinLdfModel) + { + SelectedLinLdfModel = par as LinLdfModel; + return; + } + + + if ((par as SelectionChangedEventArgs)!.AddedItems[0] == null) + { + return; + } + //先判断是否是正确的集合数据,防止DataGrid的数据源刷新导致的触发事件 + var Selecteddata = (par as SelectionChangedEventArgs)!.AddedItems[0] as LinLdfModel; + + if (Selecteddata != null) + { + SelectedLinLdfModel = Selecteddata; + + } + } + + + private DelegateCommand _DataGridMenuCmd; + /// + /// DataGridMenu 操作的指令 + /// + public DelegateCommand DataGridMenuCmd + { + set + { + _DataGridMenuCmd = value; + } + get + { + if (_DataGridMenuCmd == null) + { + _DataGridMenuCmd = new DelegateCommand((Par) => DataGridMenuCmdMethod(Par)); + } + return _DataGridMenuCmd; + } + } + /// + /// DataGridMenu 操作的指令 + /// + /// + private void DataGridMenuCmdMethod(string Par) + { + switch (Par) + { + case "Write": + if (SelectedLinLdfModel != null && SelectCanLinConfigPro != null) + { + FreeSql.Insert(new CanLinRWConfig() + { + Name = "", + SignalName = SelectedLinLdfModel.SignalName, + MsgFrameName = SelectedLinLdfModel.MsgName, + CanLinConfigProId = SelectCanLinConfigPro.Id, + DefautValue = "", + RWInfo = RW.Write, + }).ExecuteInserted(); + + InitLoadLinConfigPro(); + } + break; + case "Read": + if (SelectedLinLdfModel != null && SelectCanLinConfigPro != null) + { + FreeSql.Insert(new CanLinRWConfig() + { + Name = "", + SignalName = SelectedLinLdfModel.SignalName, + MsgFrameName = SelectedLinLdfModel.MsgName, + CanLinConfigProId = SelectCanLinConfigPro.Id, + DefautValue = "", + RWInfo = RW.Read, + }).ExecuteInserted(); + + InitLoadLinConfigPro(); + } + break; + default: + break; + } + } + + + + #endregion + + #region LIN操作 + + private LINConfigExdDto _SelectedLINConfigExdDto; + /// + /// 选中的LIN操作 + /// + public LINConfigExdDto SelectedLINConfigExdDto + { + get { return _SelectedLINConfigExdDto; } + set { _SelectedLINConfigExdDto = value; RaisePropertyChanged(); } + } + + private DelegateCommand _LinOpCmd; + /// + /// LIN操作的指令 + /// + public DelegateCommand LinOpCmd + { + set + { + _LinOpCmd = value; + } + get + { + if (_LinOpCmd == null) + { + _LinOpCmd = new DelegateCommand((Par) => LinOpCmdMethod(Par)); + } + return _LinOpCmd; + } + } + /// + /// LIN操作的指令方法 + /// + /// + private void LinOpCmdMethod(string Par) + { + switch (Par) + { + case "Open": + if (ComActionService.IsLINToDoWork() == false) + { + System.Windows.MessageBox.Show("请关闭CAN连接后才能开启LIN,同一个时刻只能有一个通信驱动压缩机", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + return; + } + if (SelectCanLinConfigPro != null && SelectedLINConfigExdDto != null) + { + //打开连接 + LinDriveService.ToomossLinDrive.StartLinDrive(); + //系统使用了LIN + ConfigService.CanLinRunStateModel.CurSysSelectedCanLin = CanLinEnum.Lin; + //LIN LDF配置 有LDF配置的话,则直接加载LDF信息 + if (!string.IsNullOrEmpty(SelectCanLinConfigPro.LINConfigExd.LdfPath)) + { + var LdfData = LinDriveService.StartLdf(SelectedLINConfigExdDto.LdfPath); + ListLinLdfModel = LdfData; + } + } + else + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + case "Close": + if (SelectCanLinConfigPro != null && SelectedLINConfigExdDto != null) + { + + LinDriveService.ToomossLinDrive.CloseDevice(); + //系统取消使用了CAN + ConfigService.CanLinRunStateModel.CurSysSelectedCanLin = CanLinEnum.No; + } + else + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + case "Save": + if (SelectCanLinConfigPro != null && SelectedLINConfigExdDto != null) + { + //保存LIN 配置 + if (!string.IsNullOrEmpty(SelectedLINConfigExdDto.LdfPath)) + { + var Update = FreeSql.Update() + .Set(a => a.LdfPath, SelectedLINConfigExdDto.LdfPath) + .Set(a => a.Cycle, SelectedLINConfigExdDto.Cycle) + .Set(a => a.BaudRate, SelectedLINConfigExdDto.BaudRate) + .Where(a => a.Id == SelectedLINConfigExdDto.Id) + .ExecuteUpdated(); + } + + InitLoadLinConfigPro(); + } + else + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + case "Parse": + if (SelectCanLinConfigPro != null && SelectedLINConfigExdDto != null) + { + //打开之后连接 + if (LinDriveService.ToomossLinDrive.OpenState) + { + //LIN LDF配置 有LDF配置的话,则加载LDF信息 + if (!string.IsNullOrEmpty(SelectedLINConfigExdDto.LdfPath)) + { + var LdfData = LinDriveService.StartLdf(SelectedLINConfigExdDto.LdfPath); + + ListLinLdfModel = LdfData; + } + else + { + System.Windows.MessageBox.Show("请选择LDF文件后再操作", "提示", System.Windows.MessageBoxButton.OKCancel, System.Windows.MessageBoxImage.Hand); + } + } + // ListLinLdfModel = new ObservableCollection() + //{ + // new LinLdfModel(){ MsgName="DSDF1",SignalName="FASDFA11",Publisher="DFAD1",SignalDesc="ASDFASD1"}, + // new LinLdfModel(){ MsgName="DSDF2",SignalName="FASDFA22",Publisher="DFAD2",SignalDesc="ASDFASD2"}, + // new LinLdfModel(){ MsgName="DSDF3",SignalName="FASDFA33",Publisher="DFAD3",SignalDesc="ASDFASD3"}, + // new LinLdfModel(){ MsgName="DSDF4",SignalName="FASDFA44",Publisher="DFAD4",SignalDesc="ASDFASD4"}, + // new LinLdfModel(){ MsgName="DSDF5",SignalName="FASDFA55",Publisher="DFAD5",SignalDesc="ASDFASD5"}, + //}; + // return; + + } + else + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + + case "HandSend"://手动发送 + + //手动发送数据 + LinDriveService.SendMsgToLinDrive(HandSpeed); + + //LinDriveService.ToomossLinDrive.SendCanMsg(new List() + //{ + // new LinCmdData(){ MsgName="TX1",SignalName="COM_current_Power",SignalCmdValue=12}, + // new LinCmdData(){ MsgName="TX1",SignalName="COM_Curr_dc",SignalCmdValue=12}, + //}); + + break; + case "CycleSend"://循环发送你 + //循环发送数据 + LinDriveService.CycleSendMsg(); + + //Listen + break; + case "CycleRecive": + LinDriveService.CycleReciveMsg(); + + //Listen + break; + default: + break; + } + } + + + private double _HandSpeed; + /// + /// 手动转速数据 + /// + public double HandSpeed + { + get { return _HandSpeed; } + set { _HandSpeed = value; RaisePropertyChanged(); } + } + + + #endregion + + + #region 写入和读取操作 + + private ObservableCollection _WriteNameCbxItems; + /// + /// 写入的Name + /// + public ObservableCollection WriteNameCbxItems + { + get { return _WriteNameCbxItems; } + set { _WriteNameCbxItems = value; RaisePropertyChanged(); } + } + + + private ObservableCollection _ReadNameCbxItems; + /// + /// 写入的Name + /// + public ObservableCollection ReadNameCbxItems + { + get { return _ReadNameCbxItems; } + set { _ReadNameCbxItems = value; RaisePropertyChanged(); } + } + + + //private string _SelectedWriteName; + ///// + ///// 选中的写入的Name + ///// + //public string SelectedWriteName + //{ + // get { return _SelectedWriteName; } + // set { _SelectedWriteName = value; RaisePropertyChanged(); } + //} + + //private string _SelectedReadName; + ///// + ///// 选中的读取的Name + ///// + //public string SelectedReadName + //{ + // get { return _SelectedReadName; } + // set { _SelectedReadName = value; RaisePropertyChanged(); } + //} + + + private ObservableCollection _ListWriteCanLinRWConfigDto; + /// + /// LIN写入集合数据 + /// + public ObservableCollection ListWriteCanLinRWConfigDto + { + get { return _ListWriteCanLinRWConfigDto; } + set { _ListWriteCanLinRWConfigDto = value; RaisePropertyChanged(); } + } + + /// + /// 选中的CanLinRWConfigDto行 Write + /// + private CanLinRWConfigDto SelectedWriteCanLinRWConfigDto { get; set; } + + private DelegateCommand _WriteGridSelectionChangedCmd; + /// + /// 写入LIN的选中行的命令 + /// + public DelegateCommand WriteGridSelectionChangedCmd + { + set + { + _WriteGridSelectionChangedCmd = value; + } + get + { + if (_WriteGridSelectionChangedCmd == null) + { + _WriteGridSelectionChangedCmd = new DelegateCommand((Par) => WriteGridSelectionChangedCmdMethod(Par)); + } + return _WriteGridSelectionChangedCmd; + } + } + /// + /// 写入LIN的选中行执行方法 + /// + /// + /// + private void WriteGridSelectionChangedCmdMethod(object par) + { + if (par is CanLinRWConfigDto) + { + SelectedWriteCanLinRWConfigDto = par as CanLinRWConfigDto; + } + } + + private DelegateCommand _WriteCmd; + /// + /// 写入操作的指令 + /// + public DelegateCommand WriteCmd + { + set + { + _WriteCmd = value; + } + get + { + if (_WriteCmd == null) + { + _WriteCmd = new DelegateCommand((Par) => WriteCmdMethod(Par)); + } + return _WriteCmd; + } + } + /// + /// 写入操作的指令方法 + /// + /// + private void WriteCmdMethod(string Par) + { + if (SelectCanLinConfigPro == null) + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + return; + } + + + switch (Par) + { + case "Add": + //由右侧的右键LDF目录增加 + + break; + case "Edit": + if (ListWriteCanLinRWConfigDto != null && ListWriteCanLinRWConfigDto.Count() > 0) + { + foreach (var item in ListWriteCanLinRWConfigDto) + { + //直接修改 + FreeSql.Update(item.Id) + .Set(a => a.Name, item.Name) + .Set(a => a.DefautValue, item.DefautValue) + .ExecuteAffrows(); + //ListWriteCanLinRWConfigDto.Remove(SelectedWriteCanLinRWConfigDto); + + //SelectedWriteCanLinRWConfigDto = null; + + } + + InitLoadLinConfigPro(); + } + + + + break; + case "Delete": + if (SelectedWriteCanLinRWConfigDto != null) + { + //直接删除掉 + FreeSql.Delete(SelectedWriteCanLinRWConfigDto.Id).ExecuteAffrows(); + ListWriteCanLinRWConfigDto.Remove(SelectedWriteCanLinRWConfigDto); + + SelectedWriteCanLinRWConfigDto = null; + + InitLoadLinConfigPro(); + } + else + { + System.Windows.MessageBox.Show("请选中后再进行【删除】操作?", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + default: + break; + } + } + + + + + + private ObservableCollection _ListReadCanLinRWConfigDto; + /// + /// LIN读取集合数据 + /// + public ObservableCollection ListReadCanLinRWConfigDto + { + get { return _ListReadCanLinRWConfigDto; } + set { _ListReadCanLinRWConfigDto = value; RaisePropertyChanged(); } + } + + /// + /// 选中的CanLinRWConfigDto行 Read + /// + private CanLinRWConfigDto SelectedReadCanLinRWConfigDto { get; set; } + + private DelegateCommand _ReadGridSelectionChangedCmd; + /// + /// 写入LIN的选中行的命令 + /// + public DelegateCommand ReadGridSelectionChangedCmd + { + set + { + _ReadGridSelectionChangedCmd = value; + } + get + { + if (_ReadGridSelectionChangedCmd == null) + { + _ReadGridSelectionChangedCmd = new DelegateCommand((Par) => ReadGridSelectionChangedCmdMethod(Par)); + } + return _ReadGridSelectionChangedCmd; + } + } + /// + /// 读取LIN的选中行执行方法 + /// + /// + /// + private void ReadGridSelectionChangedCmdMethod(object par) + { + if (par is CanLinRWConfigDto) + { + SelectedReadCanLinRWConfigDto = par as CanLinRWConfigDto; + } + } + + + + private DelegateCommand _ReadCmd; + /// + /// 读取操作的指令 + /// + public DelegateCommand ReadCmd + { + set + { + _ReadCmd = value; + } + get + { + if (_ReadCmd == null) + { + _ReadCmd = new DelegateCommand((Par) => ReadCmdMethod(Par)); + } + return _ReadCmd; + } + } + /// + /// 读取操作的指令方法 + /// + /// + private void ReadCmdMethod(string Par) + { + if (SelectCanLinConfigPro == null) + { + System.Windows.MessageBox.Show("选中LIN配置名称后再操作", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + return; + } + + switch (Par) + { + case "Add": + //由右侧的右键LDF目录增加 + + break; + case "Edit": + if (ListReadCanLinRWConfigDto != null && ListReadCanLinRWConfigDto.Count() > 0) + { + foreach (var item in ListReadCanLinRWConfigDto) + { + //直接修改 + FreeSql.Update(item.Id) + .Set(a => a.Name, item.Name) + .Set(a => a.DefautValue, item.DefautValue) + .ExecuteAffrows(); + //ListReadCanLinRWConfigDto.Remove(SelectedReadCanLinRWConfigDto); + + //SelectedReadCanLinRWConfigDto = null; + + } + + InitLoadLinConfigPro(); + } + + + + break; + case "Delete": + if (SelectedReadCanLinRWConfigDto != null) + { + //直接删除掉 + FreeSql.Delete(SelectedReadCanLinRWConfigDto.Id).ExecuteAffrows(); + ListReadCanLinRWConfigDto.Remove(SelectedReadCanLinRWConfigDto); + + SelectedReadCanLinRWConfigDto = null; + + InitLoadLinConfigPro(); + } + else + { + System.Windows.MessageBox.Show("请选中后再进行【删除】操作?", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand); + } + + break; + default: + break; + } + } + + #endregion + } +} diff --git a/CapMachine.Wpf/ViewModels/SplashScreenViewModel.cs b/CapMachine.Wpf/ViewModels/SplashScreenViewModel.cs new file mode 100644 index 0000000..b378593 --- /dev/null +++ b/CapMachine.Wpf/ViewModels/SplashScreenViewModel.cs @@ -0,0 +1,55 @@ +using CapMachine.Core; +using CapMachine.Wpf.Services; +using Prism.Services.Dialogs; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace CapMachine.Wpf.ViewModels +{ + public class SplashScreenViewModel : DialogViewModel + { + private readonly IApplicationContext applicationContext; + + private string displayText; + + public string DisplayText + { + get { return displayText; } + set { displayText = value; RaisePropertyChanged(); } + } + + public SplashScreenViewModel( + IApplicationContext applicationContext + ) + { + this.applicationContext = applicationContext; + + } + + public override async void OnDialogOpened(IDialogParameters parameters) + { + await SetBusyAsync(async () => + { + await Task.Delay(2000); + + //加载本地的缓存信息 + DisplayText = "Initializing"; + + OnDialogClosed(); + //OnDialogClosed(ButtonResult.OK); + + ////如果本地授权存在,直接进入系统首页 + //if (accessTokenManager.IsUserLoggedIn && applicationContext.Configuration != null) + // OnDialogClosed(); + //else if (applicationContext.Configuration != null) + // OnDialogClosed(ButtonResult.Ignore); + //else + // OnDialogClosed(ButtonResult.No); + }); + } + } +} diff --git a/CapMachine.Wpf/ViewModels/TaskBarViewModel.cs b/CapMachine.Wpf/ViewModels/TaskBarViewModel.cs new file mode 100644 index 0000000..db72deb --- /dev/null +++ b/CapMachine.Wpf/ViewModels/TaskBarViewModel.cs @@ -0,0 +1,41 @@ +using CapMachine.Wpf.Services; +using Prism.Commands; +using Prism.Mvvm; +using Prism.Ioc; + +namespace CapMachine.Wpf.ViewModels +{ + public class TaskBarViewModel : BindableBase + { + private readonly IHostDialogService dialog; + private readonly IAppStartService appStartService; + public DelegateCommand ExitCommand { get; set; } + public DelegateCommand ShowViewCommand { get; private set; } + + public TaskBarViewModel() + { + dialog = ContainerLocator.Container.Resolve(); + appStartService = ContainerLocator.Container.Resolve(); + + ExitCommand = new DelegateCommand(Exit); + ShowViewCommand = new DelegateCommand(ShowView); + } + + private async void Exit() + { + ShowView(); + + if (await dialog.Question("确定","1")) + appStartService.Exit(); + } + + private void ShowView() + { + if (!App.Current.MainWindow.IsVisible) + { + App.Current.MainWindow.Show(); + App.Current.MainWindow.WindowState = System.Windows.WindowState.Normal; + } + } + } +} diff --git a/CapMachine.Wpf/Views/CANConfigView.xaml b/CapMachine.Wpf/Views/CANConfigView.xaml index 66edb7f..ca761b4 100644 --- a/CapMachine.Wpf/Views/CANConfigView.xaml +++ b/CapMachine.Wpf/Views/CANConfigView.xaml @@ -459,7 +459,7 @@ Text="" /> @@ -476,14 +476,38 @@ + Text="连接" /> + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CapMachine.Wpf/Views/LINConfigView.xaml.cs b/CapMachine.Wpf/Views/LINConfigView.xaml.cs new file mode 100644 index 0000000..fd07d2a --- /dev/null +++ b/CapMachine.Wpf/Views/LINConfigView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace CapMachine.Wpf.Views +{ + /// + /// LINConfigView.xaml 的交互逻辑 + /// + public partial class LINConfigView : UserControl + { + public LINConfigView() + { + InitializeComponent(); + } + } +} diff --git a/CapMachine.Wpf/Views/MonitorView.xaml b/CapMachine.Wpf/Views/MonitorView.xaml index 9b4d69d..df732a2 100644 --- a/CapMachine.Wpf/Views/MonitorView.xaml +++ b/CapMachine.Wpf/Views/MonitorView.xaml @@ -168,6 +168,8 @@ AutoHandCommand="{Binding Source={StaticResource Proxy}, Path=Data.AutoHandCmd}" AutoHandState="False" HandValueCommand="{Binding Source={StaticResource Proxy}, Path=Data.HandValueCmd}" + HandValueMVParameter="{Binding EngMvValue}" + HandValueSVParameter="{Binding EngSvValue}" MeterName="{Binding NameNoUnit}" PVValue="{Binding EngPvValue}" SVValue="{Binding EngSvValue}" @@ -208,7 +210,7 @@ - - + --> - + + Foreground="LimeGreen" + Text="{Binding MachineRtDataService.CurSysExdInfo.RunTimeMsg}" /> - - + --> + -