Buttons design in FSM Table, default condition table

This commit is contained in:
2024-12-04 16:46:27 +07:00
parent fd4caf028b
commit 721d397671
3 changed files with 190 additions and 14 deletions

View File

@@ -59,6 +59,9 @@ namespace FAtoPA.Net
// tabel translation FSM Status String to Modbus Register Value
ObservableCollection<FSMModbusData> ModbusTranslationTable;
ObservableCollection<FSMConditionVX> FSMConditionTable;
@@ -111,7 +114,8 @@ namespace FAtoPA.Net
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
Load_ModbusTranslationTable();
Load_ModbusTranslationTable();
Load_ConditionTable();
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)
{
@@ -269,6 +362,7 @@ namespace FAtoPA.Net
ModbusTable.ItemsSource = ModbusTableMember;
VXTable.ItemsSource = VXTableMember;
FSMtoModbusTranslationTable.ItemsSource = ModbusTranslationTable;
ConditionTable.ItemsSource = FSMConditionTable;
// Load FSM
fsmEvent = new FSMEvent(this.firealarmstatusbar);
@@ -309,7 +403,7 @@ namespace FAtoPA.Net
fsm.AddListener(new FSMTableUpdater(FsmTableMember, DetectedSIID, DetectedSIIDCount));
fsm.AddListener(new ModbusTriggerFromFSM(FsmTableMember, ModbusTableMember, modbusSlave, ModbusTranslationTable));
fsm.AddListener(new VXTriggerFromFSM(FsmTableMember, VXTableMember, vx3k, ConditionON, ConditionOFF));
VerifyDataGridBinding(ConditionTable);
}
private void Timer1s_Tick(object sender, EventArgs e)
@@ -1117,7 +1211,6 @@ namespace FAtoPA.Net
break;
}
}
private void VXTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
@@ -1256,21 +1349,53 @@ namespace FAtoPA.Net
Debug.WriteLine("ConditionTable_AutoGeneratingColumn : " + e.PropertyName);
switch (e.PropertyName)
{
case "No":
case "condition":
e.Column.Width = DataGridLength.Auto;
break;
case "Condition":
e.Column.Width = DataGridLength.Auto;
break;
case "PAS Status":
case "status":
e.Column.Width = DataGridLength.Auto;
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.");
}
}
}