From 68f4c027dfeef88694ba1f30caad2050eb27d599 Mon Sep 17 00:00:00 2001 From: Federico Barresi Date: Wed, 21 Jul 2021 15:17:11 +0200 Subject: [PATCH] Added support for plc variable of type TIME - fix #24 --- .../Converters/TimeToTimeSpanConverter.cs | 35 +++++++++++++++++++ .../ViewModels/ObserverViewModel.cs | 3 ++ TwinCatAdsTool.Gui/Views/ExploreView.xaml | 6 ++++ .../SymbolObservationTemplateSelector.cs | 11 +++--- .../Services/PersistentVariableService.cs | 4 +-- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 TwinCatAdsTool.Gui/Converters/TimeToTimeSpanConverter.cs diff --git a/TwinCatAdsTool.Gui/Converters/TimeToTimeSpanConverter.cs b/TwinCatAdsTool.Gui/Converters/TimeToTimeSpanConverter.cs new file mode 100644 index 0000000..26397c0 --- /dev/null +++ b/TwinCatAdsTool.Gui/Converters/TimeToTimeSpanConverter.cs @@ -0,0 +1,35 @@ +using System; +using System.Globalization; +using System.Windows.Data; +using TwinCAT.PlcOpen; + +namespace TwinCatAdsTool.Gui.Converters +{ + public class TimeToTimeSpanConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + return DoConvert(value); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + return DoConvert(value); + } + + private object DoConvert(object value) + { + if (value is TIME lTime) + { + return lTime.Value; + } + + if (value is TimeSpan timeSpan) + { + return new TIME(timeSpan); + } + + return value; + } + } +} \ No newline at end of file diff --git a/TwinCatAdsTool.Gui/ViewModels/ObserverViewModel.cs b/TwinCatAdsTool.Gui/ViewModels/ObserverViewModel.cs index 9250470..d86d465 100644 --- a/TwinCatAdsTool.Gui/ViewModels/ObserverViewModel.cs +++ b/TwinCatAdsTool.Gui/ViewModels/ObserverViewModel.cs @@ -86,6 +86,9 @@ private void CreateViewModelOrShowMessage(ISymbol symbol) case "LTIME": ViewModels.Add(viewModelFactory.CreateViewModel>(symbol)); break; + case "TIME": + ViewModels.Add(viewModelFactory.CreateViewModel>(symbol)); + break; default: if (symbol.TypeName.ToUpper().StartsWith("STRING")) { diff --git a/TwinCatAdsTool.Gui/Views/ExploreView.xaml b/TwinCatAdsTool.Gui/Views/ExploreView.xaml index c810c7a..20f41e6 100644 --- a/TwinCatAdsTool.Gui/Views/ExploreView.xaml +++ b/TwinCatAdsTool.Gui/Views/ExploreView.xaml @@ -39,6 +39,7 @@ + @@ -52,6 +53,10 @@ + + + + @@ -88,6 +93,7 @@ ByteTemplate="{StaticResource ByteTemplate}" BoolTemplate="{StaticResource BoolTemplate}" DateTimeTemplate="{StaticResource DateTimeTemplate}" + LTimeSpanTemplate="{StaticResource LTimeSpanTemplate}" TimeSpanTemplate="{StaticResource TimeSpanTemplate}" DoubleTemplate="{StaticResource DoubleTemplate}" /> diff --git a/TwinCatAdsTool.Gui/Views/SymbolObservationTemplateSelector.cs b/TwinCatAdsTool.Gui/Views/SymbolObservationTemplateSelector.cs index 325a4b3..7cd2a96 100644 --- a/TwinCatAdsTool.Gui/Views/SymbolObservationTemplateSelector.cs +++ b/TwinCatAdsTool.Gui/Views/SymbolObservationTemplateSelector.cs @@ -12,17 +12,13 @@ public class SymbolObservationTemplateSelector : DataTemplateSelector { public DataTemplate DefaultTemplate { get; set; } public DataTemplate IntTemplate { get; set; } - public DataTemplate SingleTemplate { get; set; } - public DataTemplate DoubleTemplate { get; set; } - public DataTemplate ByteTemplate { get; set; } - public DataTemplate StringTemplate { get; set; } public DataTemplate DateTimeTemplate { get; set; } public DataTemplate BoolTemplate { get; set; } - + public DataTemplate LTimeSpanTemplate { get; set; } public DataTemplate TimeSpanTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) @@ -58,6 +54,11 @@ public override DataTemplate SelectTemplate(object item, DependencyObject contai } if (item is SymbolObservationViewModel) + { + return LTimeSpanTemplate; + } + + if (item is SymbolObservationViewModel