Buttons design in FSM Table, default condition table
This commit is contained in:
43
Database.cs
43
Database.cs
@@ -666,6 +666,49 @@ namespace FAtoPA
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class FSMConditionVX : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
private string _condition;
|
||||||
|
public string Condition
|
||||||
|
{
|
||||||
|
get => _condition;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_condition != value)
|
||||||
|
{
|
||||||
|
_condition = value;
|
||||||
|
OnPropertyChanged(nameof(Condition));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private short _status;
|
||||||
|
public short Status
|
||||||
|
{
|
||||||
|
get { return _status; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_status != value)
|
||||||
|
{
|
||||||
|
_status = value;
|
||||||
|
OnPropertyChanged(nameof(Status));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public FSMConditionVX(string condition,short status)
|
||||||
|
{
|
||||||
|
this._condition = condition;
|
||||||
|
this._status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
protected void OnPropertyChanged(string propertyName)
|
||||||
|
{
|
||||||
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class VXData : INotifyPropertyChanged
|
class VXData : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
private String _siid;
|
private String _siid;
|
||||||
|
|||||||
@@ -182,8 +182,8 @@
|
|||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Grid.Column="1" Margin="5,0" Padding="5,0" x:Name="btnDelSIID" Content="Remove From Table" Click="btnDelSIID_Click"/>
|
<Button Grid.Column="0" Margin="5,0" Padding="5,0" x:Name="btnDelSIID" Content="Remove From Table" Click="btnDelSIID_Click"/>
|
||||||
<Button Grid.Column="2" Margin="5,0" Padding="5,0" x:Name="btnClearSIID" Content="Clear Table" Click="btnClearSIID_Click"/>
|
<Button Grid.Column="1" Margin="5,0" Padding="5,0" x:Name="btnClearSIID" Content="Clear Table" Click="btnClearSIID_Click"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
<DockPanel DockPanel.Dock="Left" Width="400">
|
<DockPanel DockPanel.Dock="Left" Width="400">
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button x:Name="SetFSMtoModbusTranslationTable" Grid.Column="0" Content="Set Value" Margin="5" Padding="5,0" Click="SetFSMtoModbusTranslationTable_Click"/>
|
<Button x:Name="SetFSMtoModbusTranslationTable" Grid.Column="0" Content="Set Value" Margin="5,5,5,0" Padding="5,0" Click="SetFSMtoModbusTranslationTable_Click" Height="40" VerticalAlignment="Top"/>
|
||||||
<Button x:Name="ResetFSMtoModbusTranslationTable" Grid.Column="1" Content="Reset Default" Margin="5" Padding="5,0" Click="ResetFSMtoModbusTranslationTable_Click"/>
|
<Button x:Name="ResetFSMtoModbusTranslationTable" Grid.Column="1" Content="Reset Default" Margin="5" Padding="5,0" Click="ResetFSMtoModbusTranslationTable_Click"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
<DataGrid x:Name="FSMtoModbusTranslationTable" MouseDoubleClick="FSMtoModbusTranslationTable_MouseDoubleClick" AutoGenerateColumns="True" Margin="5,0" AutoGeneratingColumn="FSMtoModbusTranslationTable_AutoGeneratingColumn"/>
|
<DataGrid x:Name="FSMtoModbusTranslationTable" MouseDoubleClick="FSMtoModbusTranslationTable_MouseDoubleClick" AutoGenerateColumns="True" Margin="5,0" AutoGeneratingColumn="FSMtoModbusTranslationTable_AutoGeneratingColumn"/>
|
||||||
@@ -317,12 +317,20 @@
|
|||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<DockPanel Grid.Row="0">
|
<DockPanel Grid.Row="0">
|
||||||
<Label Content="TOA VX-3000" FontWeight="Bold" DockPanel.Dock="Top"/>
|
<Label Content="TOA VX-3000" FontWeight="Bold" DockPanel.Dock="Top"/>
|
||||||
<DataGrid MinRowHeight="50" x:Name="VXTable" AutoGenerateColumns="True" AutoGeneratingColumn="VXTable_AutoGeneratingColumn" SelectionChanged="VXTable_SelectionChanged" />
|
<DataGrid MinRowHeight="50" x:Name="VXTable" AutoGenerateColumns="True" AutoGeneratingColumn="VXTable_AutoGeneratingColumn"/>
|
||||||
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<DockPanel Grid.Row="1">
|
<DockPanel Grid.Row="1">
|
||||||
<Label Content="FSM Condition" FontWeight="Bold" DockPanel.Dock="Top"/>
|
<Label Content="FSM Condition" FontWeight="Bold" DockPanel.Dock="Top"/>
|
||||||
<DataGrid MinRowHeight="50" Grid.Row="1" x:Name="ConditionTable" AutoGenerateColumns="True" AutoGeneratingColumn="ConditionTable_AutoGeneratingColumn"/>
|
<Grid DockPanel.Dock="Bottom" Height="75">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button x:Name="btnResetFSMCon" Content="Reset Table" Height="65" Click="btnResetFSMCon_Click" Grid.Column="0"/>
|
||||||
|
<Button x:Name="btnSetFSMCon" Content="Set Table" Height="65" Click="btnSetFSMCon_Click" Grid.Column="1"/>
|
||||||
|
</Grid>
|
||||||
|
<DataGrid MinRowHeight="50" x:Name="ConditionTable" AutoGenerateColumns="True" AutoGeneratingColumn="ConditionTable_AutoGeneratingColumn" DockPanel.Dock="Top"/>
|
||||||
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,9 @@ namespace FAtoPA.Net
|
|||||||
ObservableCollection<FSMModbusData> ModbusTranslationTable;
|
ObservableCollection<FSMModbusData> ModbusTranslationTable;
|
||||||
|
|
||||||
|
|
||||||
|
ObservableCollection<FSMConditionVX> FSMConditionTable;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FSMEvent fsmEvent;
|
FSMEvent fsmEvent;
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
@@ -112,6 +115,7 @@ namespace FAtoPA.Net
|
|||||||
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
||||||
|
|
||||||
Load_ModbusTranslationTable();
|
Load_ModbusTranslationTable();
|
||||||
|
Load_ConditionTable();
|
||||||
|
|
||||||
DataContext = this;
|
DataContext = this;
|
||||||
|
|
||||||
@@ -216,6 +220,95 @@ namespace FAtoPA.Net
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Load_ConditionTable()
|
||||||
|
{
|
||||||
|
if (File.Exists("FSMConditionTable.json"))
|
||||||
|
{
|
||||||
|
String loadedJson = File.ReadAllText("FSMConditionTable.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
FSMConditionTable = JsonSerializer.Deserialize<ObservableCollection<FSMConditionVX>>(loadedJson);
|
||||||
|
Debug.WriteLine("FSMConditionTable loaded");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Error loading FSMConditionTable : " + ex.Message);
|
||||||
|
Create_Default_ConditionTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("FSMConditionTable.json not found, creating default");
|
||||||
|
Create_Default_ConditionTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Create_Default_ConditionTable()
|
||||||
|
{
|
||||||
|
FSMConditionTable = new ObservableCollection<FSMConditionVX>();
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.INVALID.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.NORMAL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.TROUBLE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.FIRE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.FIRE_PRE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.VERIFY_FIRE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.HEAT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.SUPERVISORY.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.SMOKE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.ACTIVATION.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.ACTIVATION_FAILED.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.TAMPER.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.COVER_OPEN.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.PAPER_OUT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WARNING.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.TROUBLE_LIGHT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WATCHDOGRESTART.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.ON.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.OFF.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.POLLUTION.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.POLLUTION_LIGHT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.MONITOR.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WATER.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.POWERFAIL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.MANUAL_ALARM.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.PAS_WAIT_FOR_ACK.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.PAS_INVESTIGATE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.AC_CHANGED.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.AC_COUNTDOWN_STARTED.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.AC_TAMPER.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.FIRE_INT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.ERROR.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.UNKNOWN.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.MATCHALL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.NET_CONFIG_MISMATCH.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.UNKNOWN_ITEM.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.MISSING_ITEM.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.INCOMPATIBLE_SOFTWARE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.INCOMPATIBLE_NET_PROTOCOL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.INFO_ALARM.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.CHEMICAL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WARNING_HEAT.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WARNING_SMOKE.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.WARNING_CHEMICAL.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.REBOOT_READY.ToString(), 0));
|
||||||
|
FSMConditionTable.Add(new FSMConditionVX(SILogicalState.LASTLOGICAL.ToString(), 0));
|
||||||
|
Save_ConditionTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Save_ConditionTable()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String json = JsonSerializer.Serialize(FSMConditionTable);
|
||||||
|
File.WriteAllText("FSMConditionTable.json", json);
|
||||||
|
Debug.WriteLine("FSMConditionTable saved");
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Error saving FSMConditionTable : " + e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -269,6 +362,7 @@ namespace FAtoPA.Net
|
|||||||
ModbusTable.ItemsSource = ModbusTableMember;
|
ModbusTable.ItemsSource = ModbusTableMember;
|
||||||
VXTable.ItemsSource = VXTableMember;
|
VXTable.ItemsSource = VXTableMember;
|
||||||
FSMtoModbusTranslationTable.ItemsSource = ModbusTranslationTable;
|
FSMtoModbusTranslationTable.ItemsSource = ModbusTranslationTable;
|
||||||
|
ConditionTable.ItemsSource = FSMConditionTable;
|
||||||
|
|
||||||
// Load FSM
|
// Load FSM
|
||||||
fsmEvent = new FSMEvent(this.firealarmstatusbar);
|
fsmEvent = new FSMEvent(this.firealarmstatusbar);
|
||||||
@@ -309,7 +403,7 @@ namespace FAtoPA.Net
|
|||||||
fsm.AddListener(new FSMTableUpdater(FsmTableMember, DetectedSIID, DetectedSIIDCount));
|
fsm.AddListener(new FSMTableUpdater(FsmTableMember, DetectedSIID, DetectedSIIDCount));
|
||||||
fsm.AddListener(new ModbusTriggerFromFSM(FsmTableMember, ModbusTableMember, modbusSlave, ModbusTranslationTable));
|
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));
|
||||||
|
VerifyDataGridBinding(ConditionTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Timer1s_Tick(object sender, EventArgs e)
|
private void Timer1s_Tick(object sender, EventArgs e)
|
||||||
@@ -1119,7 +1213,6 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void VXTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
|
private void VXTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("VXTable_AutoGeneratingColumn : " + e.PropertyName);
|
Debug.WriteLine("VXTable_AutoGeneratingColumn : " + e.PropertyName);
|
||||||
@@ -1256,21 +1349,53 @@ namespace FAtoPA.Net
|
|||||||
Debug.WriteLine("ConditionTable_AutoGeneratingColumn : " + e.PropertyName);
|
Debug.WriteLine("ConditionTable_AutoGeneratingColumn : " + e.PropertyName);
|
||||||
switch (e.PropertyName)
|
switch (e.PropertyName)
|
||||||
{
|
{
|
||||||
case "No":
|
case "condition":
|
||||||
e.Column.Width = DataGridLength.Auto;
|
e.Column.Width = DataGridLength.Auto;
|
||||||
break;
|
break;
|
||||||
case "Condition":
|
case "status":
|
||||||
e.Column.Width = DataGridLength.Auto;
|
|
||||||
break;
|
|
||||||
case "PAS Status":
|
|
||||||
e.Column.Width = DataGridLength.Auto;
|
e.Column.Width = DataGridLength.Auto;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void VXTable_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void btnResetFSMCon_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
|
var result = MessageBox.Show($"Reset FSM Condition Table ?", "Reset FSM Condition Table", MessageBoxButton.YesNo);
|
||||||
|
if (result == MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
Create_Default_ConditionTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSetFSMCon_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show($"Save FSM Condition Table ?", "Save FSM Condition Table", MessageBoxButton.YesNo);
|
||||||
|
if (result == MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
Save_ConditionTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Method to verify if the DataGrid is correctly bound to the data source
|
||||||
|
private void VerifyDataGridBinding(DataGrid dataGrid)
|
||||||
|
{
|
||||||
|
if (dataGrid.ItemsSource == null)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("DataGrid is not bound to any data source.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var dataSourceType = dataGrid.ItemsSource.GetType();
|
||||||
|
Debug.WriteLine($"DataGrid is bound to data source of type: {dataSourceType.Name}");
|
||||||
|
|
||||||
|
// Check if the data source is an ObservableCollection
|
||||||
|
if (dataSourceType.IsGenericType && dataSourceType.GetGenericTypeDefinition() == typeof(ObservableCollection<>))
|
||||||
|
{
|
||||||
|
Debug.WriteLine("DataGrid is bound to an ObservableCollection.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("DataGrid is bound to a different type of collection.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user