add translation table from FSM LogicalState to Modbus Register Value
This commit is contained in:
@@ -17,6 +17,21 @@
|
|||||||
<Deterministic>true</Deterministic>
|
<Deterministic>true</Deterministic>
|
||||||
<NuGetPackageImportStamp>
|
<NuGetPackageImportStamp>
|
||||||
</NuGetPackageImportStamp>
|
</NuGetPackageImportStamp>
|
||||||
|
<PublishUrl>publish\</PublishUrl>
|
||||||
|
<Install>true</Install>
|
||||||
|
<InstallFrom>Disk</InstallFrom>
|
||||||
|
<UpdateEnabled>false</UpdateEnabled>
|
||||||
|
<UpdateMode>Foreground</UpdateMode>
|
||||||
|
<UpdateInterval>7</UpdateInterval>
|
||||||
|
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||||
|
<UpdatePeriodically>false</UpdatePeriodically>
|
||||||
|
<UpdateRequired>false</UpdateRequired>
|
||||||
|
<MapFileExtensions>true</MapFileExtensions>
|
||||||
|
<ApplicationRevision>0</ApplicationRevision>
|
||||||
|
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||||
|
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||||
|
<UseApplicationTrust>false</UseApplicationTrust>
|
||||||
|
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@@ -170,7 +185,11 @@
|
|||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
|
<Compile Include="FSMModbusData.cs" />
|
||||||
<Compile Include="VX3K.cs" />
|
<Compile Include="VX3K.cs" />
|
||||||
|
<Compile Include="InputBox.xaml.cs">
|
||||||
|
<DependentUpon>InputBox.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Page Include="MainWindow.xaml">
|
<Page Include="MainWindow.xaml">
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
@@ -188,6 +207,10 @@
|
|||||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Page Include="InputBox.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="MappingData.cs" />
|
<Compile Include="MappingData.cs" />
|
||||||
@@ -219,6 +242,18 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>Microsoft .NET Framework 4.8 %28x86 and x64%29</ProductName>
|
||||||
|
<Install>true</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||||
|
<Visible>False</Visible>
|
||||||
|
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||||
|
<Install>false</Install>
|
||||||
|
</BootstrapperPackage>
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|||||||
17
FSM.cs
17
FSM.cs
@@ -12,6 +12,9 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace FAtoPA
|
namespace FAtoPA
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class to handle Fire Alarm System Monitoring
|
||||||
|
/// </summary>
|
||||||
class FSM
|
class FSM
|
||||||
{
|
{
|
||||||
public static bool Started = false;
|
public static bool Started = false;
|
||||||
@@ -21,6 +24,11 @@ namespace FAtoPA
|
|||||||
public Dictionary<int, String> ItemTypeDictionary { get; }
|
public Dictionary<int, String> ItemTypeDictionary { get; }
|
||||||
public Dictionary<String, NodeData> AvailableNodes { get; }
|
public Dictionary<String, NodeData> AvailableNodes { get; }
|
||||||
private EventInterface _event;
|
private EventInterface _event;
|
||||||
|
/// <summary>
|
||||||
|
/// to count the incoming event, then update at _event;
|
||||||
|
/// </summary>
|
||||||
|
public static long eventcounter = 0;
|
||||||
|
|
||||||
public FSM(EventInterface callback)
|
public FSM(EventInterface callback)
|
||||||
{
|
{
|
||||||
_event = callback;
|
_event = callback;
|
||||||
@@ -75,6 +83,7 @@ namespace FAtoPA
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
|
eventcounter = 0;
|
||||||
controller = FSIController.GetInstance();
|
controller = FSIController.GetInstance();
|
||||||
// internal Listeners
|
// internal Listeners
|
||||||
controller.AddListener(new ConfigListener(ItemTypeDictionary, AvailableNodes, listenerlist));
|
controller.AddListener(new ConfigListener(ItemTypeDictionary, AvailableNodes, listenerlist));
|
||||||
@@ -150,6 +159,7 @@ namespace FAtoPA
|
|||||||
public void SetItemType(ItemType devItemType)
|
public void SetItemType(ItemType devItemType)
|
||||||
{
|
{
|
||||||
//Debug.WriteLine($"Item type {devItemType.FunctionalType} ({devItemType.Description})");
|
//Debug.WriteLine($"Item type {devItemType.FunctionalType} ({devItemType.Description})");
|
||||||
|
|
||||||
if (type_dictionary != null)
|
if (type_dictionary != null)
|
||||||
{
|
{
|
||||||
int type = int.Parse(devItemType.FunctionalType.ToString());
|
int type = int.Parse(devItemType.FunctionalType.ToString());
|
||||||
@@ -161,6 +171,9 @@ namespace FAtoPA
|
|||||||
else Debug.WriteLine($"type_dictionary already have key={type}");
|
else Debug.WriteLine($"type_dictionary already have key={type}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FSM.eventcounter++;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -191,6 +204,7 @@ namespace FAtoPA
|
|||||||
}
|
}
|
||||||
else Debug.WriteLine($"node_data already have SIID={SIID}");
|
else Debug.WriteLine($"node_data already have SIID={SIID}");
|
||||||
}
|
}
|
||||||
|
FSM.eventcounter++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,6 +221,7 @@ namespace FAtoPA
|
|||||||
if (node_data.ContainsKey(SIID)) node_data.Remove(SIID);
|
if (node_data.ContainsKey(SIID)) node_data.Remove(SIID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
FSM.eventcounter++;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,6 +276,7 @@ namespace FAtoPA
|
|||||||
|
|
||||||
} else Debug.WriteLine("node_data is null");
|
} else Debug.WriteLine("node_data is null");
|
||||||
|
|
||||||
|
FSM.eventcounter++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,6 +287,7 @@ namespace FAtoPA
|
|||||||
public void SetMPNetTime(DateTime mpNetTime)
|
public void SetMPNetTime(DateTime mpNetTime)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Time is {mpNetTime}");
|
Debug.WriteLine($"Time is {mpNetTime}");
|
||||||
|
FSM.eventcounter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
52
FSMModbusData.cs
Normal file
52
FSMModbusData.cs
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace FAtoPA.Net
|
||||||
|
{
|
||||||
|
internal class FSMModbusData : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
private string _logicalstate;
|
||||||
|
public String LogicalState
|
||||||
|
{
|
||||||
|
get { return _logicalstate; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_logicalstate != value)
|
||||||
|
{
|
||||||
|
|
||||||
|
_logicalstate = value;
|
||||||
|
OnPropertyChanged(nameof(LogicalState));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private short _register;
|
||||||
|
public short Register
|
||||||
|
{
|
||||||
|
get { return _register; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_register != value)
|
||||||
|
{
|
||||||
|
_register = value;
|
||||||
|
OnPropertyChanged(nameof(Register));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FSMModbusData(String logicalstate, short register)
|
||||||
|
{
|
||||||
|
LogicalState = logicalstate;
|
||||||
|
Register = register;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void OnPropertyChanged(string propertyName)
|
||||||
|
{
|
||||||
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
}
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
43
InputBox.xaml
Normal file
43
InputBox.xaml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<Window x:Class="FAtoPA.Net.InputBox"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||||
|
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||||
|
xmlns:local="clr-namespace:FAtoPA.Net"
|
||||||
|
mc:Ignorable="d"
|
||||||
|
Title="FSM To Modbus Register" Height="200" Width="250">
|
||||||
|
<Grid>
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<Grid Grid.Row="0">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="AUTO"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Label Grid.Column="0" Content="Logical State" VerticalContentAlignment="Center"/>
|
||||||
|
<Border Grid.Column="1" BorderBrush="Black" BorderThickness="1" Margin="5">
|
||||||
|
<TextBlock x:Name="txtLogicalState" />
|
||||||
|
</Border>
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="1">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="AUTO"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Label Grid.Column="0" Content="Modbus Register" VerticalContentAlignment="Center"/>
|
||||||
|
<ComboBox Grid.Column="1" x:Name="cbModbusRegister" Margin="5" />
|
||||||
|
</Grid>
|
||||||
|
<Grid Grid.Row="2">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button Grid.Column="0" Content="Cancel" Margin="5" Click="Cancel_Click"/>
|
||||||
|
<Button Grid.Column="1" Content="OK" Margin="5" Click="OK_Click"/>
|
||||||
|
</Grid>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
77
InputBox.xaml.cs
Normal file
77
InputBox.xaml.cs
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
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.Shapes;
|
||||||
|
|
||||||
|
namespace FAtoPA.Net
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for Window1.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class InputBox : Window
|
||||||
|
{
|
||||||
|
private String _key;
|
||||||
|
public String FsmState { get => _key; }
|
||||||
|
private short _value;
|
||||||
|
public short ModbusRegister { get => _value; }
|
||||||
|
private List<short> ModbusRegisters;
|
||||||
|
|
||||||
|
|
||||||
|
public InputBox(string key, short value)
|
||||||
|
{
|
||||||
|
_key = key;
|
||||||
|
_value = value;
|
||||||
|
ModbusRegisters = new List<short>();
|
||||||
|
for (short i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
ModbusRegisters.Add(i);
|
||||||
|
}
|
||||||
|
InitializeComponent();
|
||||||
|
cbModbusRegister.ItemsSource = ModbusRegisters;
|
||||||
|
|
||||||
|
txtLogicalState.Text = key;
|
||||||
|
cbModbusRegister.SelectedIndex = ModbusRegisters.IndexOf(value);
|
||||||
|
|
||||||
|
|
||||||
|
DataContext = this;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Cancel_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
this.DialogResult = false;
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OK_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
if (cbModbusRegister.SelectedIndex != -1)
|
||||||
|
{
|
||||||
|
var selected = cbModbusRegister.SelectedItem;
|
||||||
|
if (selected != null)
|
||||||
|
{
|
||||||
|
short vv = (short)selected;
|
||||||
|
if (vv!= _value)
|
||||||
|
{
|
||||||
|
_value = vv;
|
||||||
|
this.DialogResult = true;
|
||||||
|
} else { this.DialogResult = false; }
|
||||||
|
Close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
MessageBox.Show("Please select a Modbus Register");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -58,10 +58,9 @@ namespace FAtoPA.Net
|
|||||||
ObservableCollection<VXData> VXTableMember { get; set; }
|
ObservableCollection<VXData> VXTableMember { get; set; }
|
||||||
|
|
||||||
// tabel translation FSM Status String to Modbus Register Value
|
// tabel translation FSM Status String to Modbus Register Value
|
||||||
public ObservableCollection<KeyValuePair<String, Int16>> ModbusTranslationTable { get; set; }
|
ObservableCollection<FSMModbusData> ModbusTranslationTable;
|
||||||
|
|
||||||
|
|
||||||
public List<String> ConditionON;
|
|
||||||
public List<String> ConditionOFF;
|
|
||||||
|
|
||||||
FSMEvent fsmEvent;
|
FSMEvent fsmEvent;
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
@@ -112,15 +111,6 @@ namespace FAtoPA.Net
|
|||||||
|
|
||||||
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
||||||
|
|
||||||
|
|
||||||
//TODO : Add Condition for ON and OFF
|
|
||||||
ConditionON = new List<string>();
|
|
||||||
ConditionON.Add(SILogicalState.ACTIVATION.ToString());
|
|
||||||
ConditionON.Add(SILogicalState.FIRE.ToString());
|
|
||||||
|
|
||||||
ConditionOFF = new List<string>();
|
|
||||||
ConditionOFF.Add(SILogicalState.NORMAL.ToString());
|
|
||||||
|
|
||||||
Load_ModbusTranslationTable();
|
Load_ModbusTranslationTable();
|
||||||
|
|
||||||
DataContext = this;
|
DataContext = this;
|
||||||
@@ -137,7 +127,7 @@ namespace FAtoPA.Net
|
|||||||
String loadedJson = File.ReadAllText("ModbusTranslationTable.json");
|
String loadedJson = File.ReadAllText("ModbusTranslationTable.json");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ModbusTranslationTable = JsonSerializer.Deserialize<ObservableCollection<KeyValuePair<string, short>>>(loadedJson);
|
ModbusTranslationTable = JsonSerializer.Deserialize<ObservableCollection<FSMModbusData>>(loadedJson);
|
||||||
Debug.WriteLine("ModbusTranslationTable loaded");
|
Debug.WriteLine("ModbusTranslationTable loaded");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -159,53 +149,53 @@ namespace FAtoPA.Net
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void Create_Default_ModbusTranslationTable()
|
private void Create_Default_ModbusTranslationTable()
|
||||||
{
|
{
|
||||||
ModbusTranslationTable = new ObservableCollection<KeyValuePair<string, short>>();
|
ModbusTranslationTable = new ObservableCollection<FSMModbusData>();
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INVALID.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.INVALID.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.NORMAL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.NORMAL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TROUBLE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.TROUBLE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.FIRE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE_PRE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.FIRE_PRE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.VERIFY_FIRE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.VERIFY_FIRE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.HEAT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.HEAT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.SUPERVISORY.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.SUPERVISORY.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.SMOKE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.SMOKE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ACTIVATION.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.ACTIVATION.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ACTIVATION_FAILED.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.ACTIVATION_FAILED.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TAMPER.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.TAMPER.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.COVER_OPEN.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.COVER_OPEN.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAPER_OUT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.PAPER_OUT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WARNING.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TROUBLE_LIGHT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.TROUBLE_LIGHT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WATCHDOGRESTART.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WATCHDOGRESTART.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ON.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.ON.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.OFF.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.OFF.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POLLUTION.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.POLLUTION.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POLLUTION_LIGHT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.POLLUTION_LIGHT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MONITOR.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.MONITOR.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WATER.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WATER.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POWERFAIL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.POWERFAIL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MANUAL_ALARM.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.MANUAL_ALARM.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAS_WAIT_FOR_ACK.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.PAS_WAIT_FOR_ACK.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAS_INVESTIGATE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.PAS_INVESTIGATE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_CHANGED.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.AC_CHANGED.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_COUNTDOWN_STARTED.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.AC_COUNTDOWN_STARTED.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_TAMPER.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.AC_TAMPER.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE_INT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.FIRE_INT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ERROR.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.ERROR.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.UNKNOWN.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.UNKNOWN.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MATCHALL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.MATCHALL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.NET_CONFIG_MISMATCH.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.NET_CONFIG_MISMATCH.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.UNKNOWN_ITEM.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.UNKNOWN_ITEM.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MISSING_ITEM.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.MISSING_ITEM.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INCOMPATIBLE_SOFTWARE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.INCOMPATIBLE_SOFTWARE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INCOMPATIBLE_NET_PROTOCOL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.INCOMPATIBLE_NET_PROTOCOL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INFO_ALARM.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.INFO_ALARM.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.CHEMICAL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.CHEMICAL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_HEAT.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WARNING_HEAT.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_SMOKE.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WARNING_SMOKE.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_CHEMICAL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.WARNING_CHEMICAL.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.REBOOT_READY.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.REBOOT_READY.ToString(), 0));
|
||||||
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.LASTLOGICAL.ToString(), 0));
|
ModbusTranslationTable.Add(new FSMModbusData(SILogicalState.LASTLOGICAL.ToString(), 0));
|
||||||
Save_ModbusTranslationTable();
|
Save_ModbusTranslationTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,9 +296,12 @@ namespace FAtoPA.Net
|
|||||||
vx3k = new VX3K(new VX3KEvent(this.vxstatusbar));
|
vx3k = new VX3K(new VX3KEvent(this.vxstatusbar));
|
||||||
//vx3k.Connect(config.VX_TargetIP, config.VX_TargetPort);
|
//vx3k.Connect(config.VX_TargetIP, config.VX_TargetPort);
|
||||||
|
|
||||||
|
List<String> ConditionON = new List<string>();
|
||||||
|
List<String> ConditionOFF = new List<string>();
|
||||||
|
|
||||||
|
|
||||||
fsm.AddListener(new FSMTableUpdater(FsmTableMember, DetectedSIID, DetectedSIIDCount));
|
fsm.AddListener(new FSMTableUpdater(FsmTableMember, DetectedSIID, DetectedSIIDCount));
|
||||||
fsm.AddListener(new ModbusTriggerFromFSM(FsmTableMember, ModbusTableMember, modbusSlave, ConditionON, ConditionOFF));
|
fsm.AddListener(new ModbusTriggerFromFSM(FsmTableMember, ModbusTableMember, modbusSlave, ModbusTranslationTable));
|
||||||
fsm.AddListener(new VXTriggerFromFSM(FsmTableMember, VXTableMember, vx3k, ConditionON, ConditionOFF));
|
fsm.AddListener(new VXTriggerFromFSM(FsmTableMember, VXTableMember, vx3k, ConditionON, ConditionOFF));
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1183,10 +1176,10 @@ namespace FAtoPA.Net
|
|||||||
Debug.WriteLine("FSMtoModbusTranslationTable_AutoGeneratingColumn : " + e.PropertyName);
|
Debug.WriteLine("FSMtoModbusTranslationTable_AutoGeneratingColumn : " + e.PropertyName);
|
||||||
switch (e.PropertyName)
|
switch (e.PropertyName)
|
||||||
{
|
{
|
||||||
case "Key":
|
case "LogicalState":
|
||||||
e.Column.Width = DataGridLength.Auto;
|
e.Column.Width = DataGridLength.Auto;
|
||||||
break;
|
break;
|
||||||
case "Value":
|
case "Register":
|
||||||
e.Column.Width = DataGridLength.Auto;
|
e.Column.Width = DataGridLength.Auto;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1202,9 +1195,26 @@ namespace FAtoPA.Net
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
KeyValuePair<String, Int16> vv = (KeyValuePair<String, Int16>)selected;
|
FSMModbusData vv = (FSMModbusData)selected;
|
||||||
Debug.WriteLine($"Selected Key={vv.Key}, Value={vv.Value}");
|
Debug.WriteLine($"Selected Key={vv.LogicalState}, Value={vv.Register}");
|
||||||
//TODO create InputBox to select Value for Key
|
|
||||||
|
InputBox ib = new InputBox(vv.LogicalState, vv.Register);
|
||||||
|
bool? haschange = ib.ShowDialog();
|
||||||
|
if (haschange.Value)
|
||||||
|
{
|
||||||
|
Debug.WriteLine($"Changed Key={ib.FsmState}, Value={ib.ModbusRegister}");
|
||||||
|
for (int ii = 0; ii < ModbusTranslationTable.Count; ii++)
|
||||||
|
{
|
||||||
|
if (ModbusTranslationTable[ii].LogicalState == vv.LogicalState)
|
||||||
|
{
|
||||||
|
ModbusTranslationTable[ii].Register = ib.ModbusRegister;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
FSMtoModbusTranslationTable.InvalidateProperty(DataGrid.ItemsSourceProperty);
|
||||||
|
|
||||||
|
}
|
||||||
} catch(Exception exception)
|
} catch(Exception exception)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("FSMtoModbusTranslationTable_MouseDoubleClick Error : " + exception.Message);
|
Debug.WriteLine("FSMtoModbusTranslationTable_MouseDoubleClick Error : " + exception.Message);
|
||||||
@@ -1469,15 +1479,13 @@ namespace FAtoPA.Net
|
|||||||
ObservableCollection<FSMData> source;
|
ObservableCollection<FSMData> source;
|
||||||
ObservableCollection<ModbusData> data;
|
ObservableCollection<ModbusData> data;
|
||||||
ModbusSlave slave;
|
ModbusSlave slave;
|
||||||
List<String> ConditionON;
|
ObservableCollection<FSMModbusData> translation;
|
||||||
List<String> ConditionOFF;
|
public ModbusTriggerFromFSM(ObservableCollection<FSMData> source, ObservableCollection<ModbusData> data, ModbusSlave slave, ObservableCollection<FSMModbusData> translation)
|
||||||
public ModbusTriggerFromFSM(ObservableCollection<FSMData> source, ObservableCollection<ModbusData> data, ModbusSlave slave, List<string> conditionON, List<string> conditionOFF)
|
|
||||||
{
|
{
|
||||||
this.source = source;
|
this.source = source;
|
||||||
this.data = data;
|
this.data = data;
|
||||||
this.slave = slave;
|
this.slave = slave;
|
||||||
ConditionON = conditionON;
|
this.translation = translation;
|
||||||
ConditionOFF = conditionOFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -1522,29 +1530,27 @@ namespace FAtoPA.Net
|
|||||||
{
|
{
|
||||||
if (slave != null)
|
if (slave != null)
|
||||||
{
|
{
|
||||||
if (ConditionON != null && ConditionOFF != null)
|
if (translation != null)
|
||||||
{
|
{
|
||||||
if (ConditionON.Contains(current.LogicalState))
|
foreach (var x in translation)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"NewState for SIID={SIID} State={current.LogicalState} is ConditionON");
|
if (x.LogicalState.Equals(current.LogicalState))
|
||||||
slave.SetRegister(dt.Register, 1);
|
{
|
||||||
dt.Value = "ON";
|
ushort reg = (ushort)x.Register;
|
||||||
|
Debug.WriteLine($"NewState for SIID={SIID} State={current.LogicalState} is Register={reg}");
|
||||||
|
slave.SetRegister(dt.Register, reg);
|
||||||
|
dt.Value = "" + reg;
|
||||||
|
dt.LastUpdate = DateTime.Now.ToString();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else if (ConditionOFF.Contains(current.LogicalState))
|
|
||||||
{
|
|
||||||
Debug.WriteLine($"NewState for SIID={SIID} State={current.LogicalState} is ConditionOFF");
|
|
||||||
slave.SetRegister(dt.Register, 0);
|
|
||||||
dt.Value = "OFF";
|
|
||||||
}
|
}
|
||||||
|
Debug.WriteLine($"Translation for SIID={SIID} LogicalState={current.LogicalState} is not found");
|
||||||
|
dt.Value = "RULE NOT SET";
|
||||||
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"NewState for SIID={SIID} in Modbus is ignored because Condition ON/OFF is not met");
|
Debug.WriteLine($"Translation for SIID={SIID} in Modbus is not set");
|
||||||
dt.Value = "RULE NOT AVAILABLE";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.WriteLine($"Condition ON/OFF for SIID={SIID} in Modbus is not set");
|
|
||||||
dt.Value = "RULE NOT SET";
|
dt.Value = "RULE NOT SET";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1570,8 +1576,8 @@ namespace FAtoPA.Net
|
|||||||
ObservableCollection<VXData> data;
|
ObservableCollection<VXData> data;
|
||||||
ObservableCollection<FSMData> source;
|
ObservableCollection<FSMData> source;
|
||||||
VX3K vx;
|
VX3K vx;
|
||||||
List<String> ConditionON;
|
List<string> ConditionON;
|
||||||
List<String> ConditionOFF;
|
List<string> ConditionOFF;
|
||||||
public VXTriggerFromFSM(ObservableCollection<FSMData> source, ObservableCollection<VXData> data, VX3K vx, List<string> conditionON, List<string> conditionOFF)
|
public VXTriggerFromFSM(ObservableCollection<FSMData> source, ObservableCollection<VXData> data, VX3K vx, List<string> conditionON, List<string> conditionOFF)
|
||||||
{
|
{
|
||||||
this.source = source;
|
this.source = source;
|
||||||
|
|||||||
Reference in New Issue
Block a user