Skip to content

Commit

Permalink
Added support for plc variable of type TIME
Browse files Browse the repository at this point in the history
- fix #24
  • Loading branch information
fbarresi committed Jul 21, 2021
1 parent 5b6a8a3 commit 68f4c02
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 7 deletions.
35 changes: 35 additions & 0 deletions TwinCatAdsTool.Gui/Converters/TimeToTimeSpanConverter.cs
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
3 changes: 3 additions & 0 deletions TwinCatAdsTool.Gui/ViewModels/ObserverViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ private void CreateViewModelOrShowMessage(ISymbol symbol)
case "LTIME":
ViewModels.Add(viewModelFactory.CreateViewModel<ISymbol, SymbolObservationViewModel<LTIME>>(symbol));
break;
case "TIME":
ViewModels.Add(viewModelFactory.CreateViewModel<ISymbol, SymbolObservationViewModel<TIME>>(symbol));
break;
default:
if (symbol.TypeName.ToUpper().StartsWith("STRING"))
{
Expand Down
6 changes: 6 additions & 0 deletions TwinCatAdsTool.Gui/Views/ExploreView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
</HierarchicalDataTemplate>

<converters:LTimeToTimeSpanConverter x:Key="LTimeToTimeSpanConverter" />
<converters:TimeToTimeSpanConverter x:Key="TimeToTimeSpanConverter" />
<converters:DtToDateTimeConverter x:Key="DtToDateTimeConverter" />

<DataTemplate x:Key="StringTemplate" DataType="{x:Type viewModels:SymbolObservationViewModel}">
Expand All @@ -52,6 +53,10 @@
<xctk:IntegerUpDown Value="{Binding NewValue, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>

<DataTemplate x:Key="LTimeSpanTemplate">
<xctk:TimeSpanUpDown Value="{Binding NewValue, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource LTimeToTimeSpanConverter}}" Width="150"/>
</DataTemplate>

<DataTemplate x:Key="TimeSpanTemplate">
<xctk:TimeSpanUpDown Value="{Binding NewValue, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource LTimeToTimeSpanConverter}}" Width="150"/>
</DataTemplate>
Expand Down Expand Up @@ -88,6 +93,7 @@
ByteTemplate="{StaticResource ByteTemplate}"
BoolTemplate="{StaticResource BoolTemplate}"
DateTimeTemplate="{StaticResource DateTimeTemplate}"
LTimeSpanTemplate="{StaticResource LTimeSpanTemplate}"
TimeSpanTemplate="{StaticResource TimeSpanTemplate}"
DoubleTemplate="{StaticResource DoubleTemplate}" />

Expand Down
11 changes: 6 additions & 5 deletions TwinCatAdsTool.Gui/Views/SymbolObservationTemplateSelector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -58,6 +54,11 @@ public override DataTemplate SelectTemplate(object item, DependencyObject contai
}

if (item is SymbolObservationViewModel<LTIME>)
{
return LTimeSpanTemplate;
}

if (item is SymbolObservationViewModel<TIME>)
{
return TimeSpanTemplate;
}
Expand Down
4 changes: 2 additions & 2 deletions TwinCatAdsTool.Logic/Services/PersistentVariableService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@ public async Task<JObject> ReadGlobalPersistentVariables(AdsClient client, IInst
!s.InstancePath.Contains("["))
;

var peristentSymbols = iterator.Where(s => s.Parent != null ? !iterator.Contains(s.Parent) : true);
var persistentSymbols = iterator.Where(s => s.Parent != null ? !iterator.Contains(s.Parent) : true);

var variables = new Dictionary<string, List<JObject>>();
foreach (var symbol in peristentSymbols)
foreach (var symbol in persistentSymbols)
{
var splitPath = symbol.InstancePath.Split('.');
var localName = splitPath.Last();
Expand Down

0 comments on commit 68f4c02

Please sign in to comment.