Improvement 25/11/2024
This commit is contained in:
162
MainWindow.xaml
162
MainWindow.xaml
@@ -45,12 +45,12 @@
|
|||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Grid DockPanel.Dock="Top" Height="75">
|
<Grid DockPanel.Dock="Top" Height="75">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="150"/>
|
<ColumnDefinition Width="170"/>
|
||||||
<ColumnDefinition Width="500"/>
|
<ColumnDefinition Width="430"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Margin="5,5,5,5" x:Name="btnStartStopFSM" Content="Start FSM Connection" Grid.Column="0" Click="btnStartStopFSM_Click" />
|
<Button Margin="5" Padding="5,0" x:Name="btnStartStopFSM" Content="Start FSM Connection" Grid.Column="0" Click="btnStartStopFSM_Click" />
|
||||||
<Grid Grid.Column="1">
|
<Grid Grid.Column="1" Margin="0,5">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
@@ -99,31 +99,30 @@
|
|||||||
<ComboBox x:Name="siSub" Text="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Row="1" Margin="5,0,5,5" ItemsSource="{Binding SISubList, IsAsync=True}" SelectedIndex="0"/>
|
<ComboBox x:Name="siSub" Text="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Grid.Row="1" Margin="5,0,5,5" ItemsSource="{Binding SISubList, IsAsync=True}" SelectedIndex="0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid Grid.Column="2">
|
<Grid Grid.Column="2" Margin="0,5">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Visibility="Hidden" Grid.Column="0" Margin="5" x:Name="btnAddSIID" Content="Manual Add To Table" Click="btnAddSIID_Click"/>
|
<Button Grid.Column="1" Margin="5,0" Padding="5,0" x:Name="btnDelSIID" Content="Remove From Table" Click="btnDelSIID_Click"/>
|
||||||
<Button Grid.Column="1" Margin="5" 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="2" Margin="5" 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">
|
||||||
<Label Content="Detected SIID" DockPanel.Dock="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
<Label Content="Detected SIID" Margin="5,0" DockPanel.Dock="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
<Grid DockPanel.Dock="Bottom" Height="50">
|
<Grid DockPanel.Dock="Bottom" Height="50" Margin="5">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto"/>
|
<ColumnDefinition Width="Auto"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Label Content="Count : 0" Margin="5,0" Grid.Column="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" x:Name="DetectedSIIDCount"/>
|
<Label Content="Count : 0" Margin="5,0" Grid.Column="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" x:Name="DetectedSIIDCount"/>
|
||||||
<Button Content="Add Selected to Table" Margin="5,0" Grid.Column="1" HorizontalAlignment="Stretch" Click="AddSelectedSIID" />
|
<Button Content="Add Selected to Table" Margin="5,0" Padding="5,0" Grid.Column="1" HorizontalAlignment="Stretch" Click="AddSelectedSIID" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
<ListBox x:Name="DetectedSIID" />
|
<ListBox x:Name="DetectedSIID" Margin="5" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<DataGrid MinRowHeight="50" x:Name="FSMTable" AutoGenerateColumns="True" AutoGeneratingColumn="FSMTable_AutoGeneratingColumn" />
|
<DataGrid Margin="5" MinRowHeight="50" x:Name="FSMTable" AutoGenerateColumns="True" AutoGeneratingColumn="FSMTable_AutoGeneratingColumn" />
|
||||||
|
|
||||||
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
@@ -132,23 +131,22 @@
|
|||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Grid DockPanel.Dock="Top" Height="75">
|
<Grid DockPanel.Dock="Top" Height="75">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="150"/>
|
<ColumnDefinition Width="170"/>
|
||||||
<ColumnDefinition Width="500"/>
|
<ColumnDefinition Width="430"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Margin="5" x:Name="btnStartStopModbus" Content="Start Modbus Connection" Grid.Column="0" Click="btnStartStopModbus_Click"/>
|
<Button Margin="5" Padding="5,0" x:Name="btnStartStopModbus" Content="Start Modbus Connection" Grid.Column="0" Click="btnStartStopModbus_Click"/>
|
||||||
<Grid Grid.Column="1">
|
<Grid Grid.Column="1" Margin="0,5">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="75"/>
|
<ColumnDefinition Width="60"/>
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="6*"/>
|
<ColumnDefinition Width="60"/>
|
||||||
<ColumnDefinition Width="75"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="7*"/>
|
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Label Grid.Column="0" Content="SIID" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
<Label Grid.Column="0" Content="SIID" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
<ComboBox Grid.Column="1" x:Name="ModbusSIIDComboBox" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="5,0,5,0" ItemsSource="{Binding FSMSIID, IsAsync=True}" Grid.ColumnSpan="2" SelectedIndex="0"/>
|
<ComboBox Grid.Column="1" x:Name="ModbusSIIDComboBox" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="5,0,5,0" ItemsSource="{Binding FSMSIID, IsAsync=True}" SelectedIndex="0"/>
|
||||||
<Label Grid.Column="3" Content="Register" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
<Label Grid.Column="2" Content="Register" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
<ComboBox Grid.Column="4" x:Name="ModbusRegister" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="5,0,5,0" ItemsSource="{Binding ModbusRegisters, IsAsync=True}" SelectedIndex="0" />
|
<ComboBox Grid.Column="3" x:Name="ModbusRegister" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="5,0,5,0" ItemsSource="{Binding ModbusRegisters, IsAsync=True}" SelectedIndex="0" />
|
||||||
</Grid>
|
</Grid>
|
||||||
<Grid Grid.Column="2">
|
<Grid Grid.Column="2">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
@@ -156,29 +154,59 @@
|
|||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Grid.Column="0" Margin="5" x:Name="btnAddModbus" Content="Add To Table" Click="btnAddModbus_Click"/>
|
<Button Grid.Column="0" Margin="5" Padding="5,0" x:Name="btnAddModbus" Content="Add To Table" Click="btnAddModbus_Click"/>
|
||||||
<Button Grid.Column="1" Margin="5" x:Name="btnDelModbus" Content="Remove From Table" Click="btnDelModbus_Click"/>
|
<Button Grid.Column="1" Margin="5" Padding="5,0" x:Name="btnDelModbus" Content="Remove From Table" Click="btnDelModbus_Click"/>
|
||||||
<Button Grid.Column="2" Margin="5" x:Name="btnClearModbus" Content="Clear Table" Click="btnClearModbus_Click"/>
|
<Button Grid.Column="2" Margin="5" Padding="5,0" x:Name="btnClearModbus" Content="Clear Table" Click="btnClearModbus_Click"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
<DockPanel DockPanel.Dock="Left" Width="400">
|
<DockPanel DockPanel.Dock="Left" Width="400">
|
||||||
<Label Content="Connected Modbus Client" DockPanel.Dock="Top" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
<Grid>
|
||||||
<Label Content="Count : 0" DockPanel.Dock="Bottom" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" x:Name="ConnectedModbusCount"/>
|
<Grid.RowDefinitions>
|
||||||
<ListBox x:Name="ConnectedModbusClients" />
|
<RowDefinition Height="*"/>
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<DockPanel Grid.Row="0">
|
||||||
|
<Grid DockPanel.Dock="Top">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="AUTO"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Label Margin="5,0" Content="Connected Modbus Client" Grid.Column="0" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||||
|
<Label Margin="5,0" Content="Count : 0" Grid.Column="1" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" x:Name="ConnectedModbusCount"/>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<ListBox x:Name="ConnectedModbusClients" Margin="5,0" />
|
||||||
|
</DockPanel>
|
||||||
|
<DockPanel Grid.Row="1">
|
||||||
|
<Label Content="FA Status to Register Definition" DockPanel.Dock="Top" HorizontalContentAlignment="Center"/>
|
||||||
|
<Grid DockPanel.Dock="Bottom" Height="50">
|
||||||
|
<Grid.ColumnDefinitions>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
<ColumnDefinition Width="*"/>
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<Button x:Name="SetFSMtoModbusTranslationTable" Grid.Column="0" Content="Set Value" Margin="5" Padding="5,0" Click="SetFSMtoModbusTranslationTable_Click"/>
|
||||||
|
<Button x:Name="ResetFSMtoModbusTranslationTable" Grid.Column="1" Content="Reset Default" Margin="5" Padding="5,0" Click="ResetFSMtoModbusTranslationTable_Click"/>
|
||||||
|
</Grid>
|
||||||
|
<DataGrid x:Name="FSMtoModbusTranslationTable" MouseDoubleClick="FSMtoModbusTranslationTable_MouseDoubleClick" AutoGenerateColumns="True" Margin="5,0" AutoGeneratingColumn="FSMtoModbusTranslationTable_AutoGeneratingColumn"/>
|
||||||
|
|
||||||
|
|
||||||
|
</DockPanel>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
<DataGrid x:Name="ModbusTable" AutoGenerateColumns="True" AutoGeneratingColumn="ModbusTable_AutoGeneratingColumn" />
|
<DataGrid MinRowHeight="50" x:Name="ModbusTable" AutoGenerateColumns="True" AutoGeneratingColumn="ModbusTable_AutoGeneratingColumn" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</TabItem>
|
</TabItem>
|
||||||
<TabItem Header="TOA VX-3000">
|
<TabItem Header="TOA VX-3000">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Grid DockPanel.Dock="Top" Height="75">
|
<Grid DockPanel.Dock="Top" Height="75">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="150"/>
|
<ColumnDefinition Width="170"/>
|
||||||
<ColumnDefinition Width="500"/>
|
<ColumnDefinition Width="430"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Margin="5,5,5,5" x:Name="btnStartStopVX" Content="Start VX-3000 Connection" Grid.Column="0" Click="btnStartStopVX_Click" />
|
<Button Margin="5,5,5,5" x:Name="btnStartStopVX" Padding="5,0" Content="Start VX-3000 Connection" Grid.Column="0" Click="btnStartStopVX_Click" />
|
||||||
<Grid Grid.Column="1">
|
<Grid Grid.Column="1" Margin="0,5,0,5" >
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="50"/>
|
<ColumnDefinition Width="50"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
@@ -200,12 +228,12 @@
|
|||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
<ColumnDefinition Width="*"/>
|
<ColumnDefinition Width="*"/>
|
||||||
</Grid.ColumnDefinitions>
|
</Grid.ColumnDefinitions>
|
||||||
<Button Grid.Column="0" Margin="5" x:Name="btnAddVX" Content="Add To Table" Click="btnAddVX_Click"/>
|
<Button Grid.Column="0" Margin="5" x:Name="btnAddVX" Padding="5,0" Content="Add To Table" Click="btnAddVX_Click"/>
|
||||||
<Button Grid.Column="1" Margin="5" x:Name="btnDelVX" Content="Remove From Table" Click="btnDelVX_Click"/>
|
<Button Grid.Column="1" Margin="5" x:Name="btnDelVX" Padding="5,0" Content="Remove From Table" Click="btnDelVX_Click"/>
|
||||||
<Button Grid.Column="2" Margin="5" x:Name="btnClearVX" Content="Clear Table" Click="btnClearVX_Click"/>
|
<Button Grid.Column="2" Margin="5" x:Name="btnClearVX" Padding="5,0" Content="Clear Table" Click="btnClearVX_Click"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
<DataGrid x:Name="VXTable" AutoGenerateColumns="True" AutoGeneratingColumn="VXTable_AutoGeneratingColumn" />
|
<DataGrid MinRowHeight="50" x:Name="VXTable" AutoGenerateColumns="True" AutoGeneratingColumn="VXTable_AutoGeneratingColumn" />
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|
||||||
</TabItem>
|
</TabItem>
|
||||||
@@ -213,35 +241,35 @@
|
|||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<GroupBox Header="Fire Alarm Settings">
|
<GroupBox Header="Fire Alarm Settings">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Button x:Name="btnApplyFSMConfig" Content="Apply Config" Click="ApplyFSMConfig" DockPanel.Dock="Right" Margin="5"/>
|
<Button x:Name="btnApplyFSMConfig" Content="Apply Config" Click="ApplyFSMConfig" DockPanel.Dock="Right" Margin="5,0" Padding="5,0"/>
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="NetGroup" Width="150"/>
|
<Label Content="NetGroup" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_NetGroup" Text="1" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_NetGroup_PreviewTextInput" TextChanged="FSMConfig_NetGroup_TextChanged"/>
|
<TextBox x:Name="FSMConfig_NetGroup" Text="1" Padding="5,0" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_NetGroup_PreviewTextInput" TextChanged="FSMConfig_NetGroup_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="NetNode" Width="150"/>
|
<Label Content="NetNode" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_NetNode" Text="1" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_NetNode_PreviewTextInput" TextChanged="FSMConfig_NetNode_TextChanged"/>
|
<TextBox x:Name="FSMConfig_NetNode" Padding="5,0" Text="1" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_NetNode_PreviewTextInput" TextChanged="FSMConfig_NetNode_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="PNA" Width="150"/>
|
<Label Content="PNA" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_PNA" Text="1" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_PNA_PreviewTextInput" TextChanged="FSMConfig_PNA_TextChanged"/>
|
<TextBox x:Name="FSMConfig_PNA" Padding="5,0" Text="1" MinWidth="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_PNA_PreviewTextInput" TextChanged="FSMConfig_PNA_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="Local IP Address" Width="150"/>
|
<Label Content="Local IP Address" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_LocalIP" Text="0.0.0.0" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_LocalIP_PreviewTextInput" TextChanged="FSMConfig_LocalIP_TextChanged"/>
|
<TextBox x:Name="FSMConfig_LocalIP" Padding="5,0" Text="0.0.0.0" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_LocalIP_PreviewTextInput" TextChanged="FSMConfig_LocalIP_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="Use Multicast" Width="150"/>
|
<Label Content="Use Multicast" Width="150"/>
|
||||||
<CheckBox x:Name="FSM_UseMulticast" Content="No" IsChecked="False" VerticalAlignment="Center"/>
|
<CheckBox x:Name="FSM_UseMulticast" Content="No" IsChecked="False" VerticalAlignment="Center"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="Multicast Address" Width="150"/>
|
<Label Content="Multicast Address" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_MulticastAddress" Text="239.192.0.1" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_MulticastAddress_PreviewTextInput" TextChanged="FSMConfig_MulticastAddress_TextChanged"/>
|
<TextBox x:Name="FSMConfig_MulticastAddress" Padding="5,0" Text="239.192.0.1" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_MulticastAddress_PreviewTextInput" TextChanged="FSMConfig_MulticastAddress_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Content="Multicast Port" Width="150"/>
|
<Label Content="Multicast Port" Width="150"/>
|
||||||
<TextBox x:Name="FSMConfig_MulticastPort" Text="25000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_MulticastPort_PreviewTextInput" TextChanged="FSMConfig_MulticastPort_TextChanged"/>
|
<TextBox x:Name="FSMConfig_MulticastPort" Padding="5,0" Text="25000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="FSMConfig_MulticastPort_PreviewTextInput" TextChanged="FSMConfig_MulticastPort_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
@@ -249,34 +277,34 @@
|
|||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Header="Modbus Setting">
|
<GroupBox Header="Modbus Setting">
|
||||||
<DockPanel>
|
<DockPanel>
|
||||||
<Button x:Name="btnApplyModbusConfig" Content="Apply Config" Click="ApplyModbusConfig" DockPanel.Dock="Right" Margin="5"/>
|
<Button x:Name="btnApplyModbusConfig" Content="Apply Config" Click="ApplyModbusConfig" DockPanel.Dock="Right" Margin="5,0" Padding="5,0"/>
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Width="150" Content="Listen Port"/>
|
<Label Width="150" Content="Listen Port"/>
|
||||||
<TextBox x:Name="ModbusListenPort" Text="502" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusListenPort_PreviewTextInput" TextChanged="ModbusListenPort_TextChanged"/>
|
<TextBox x:Name="ModbusListenPort" Text="502" Padding="5,0" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusListenPort_PreviewTextInput" TextChanged="ModbusListenPort_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Width="150" Content="Device ID"/>
|
<Label Width="150" Content="Device ID"/>
|
||||||
<TextBox x:Name="ModbusDeviceID" Text="1" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusDeviceID_PreviewTextInput" TextChanged="ModbusDeviceID_TextChanged"/>
|
<TextBox x:Name="ModbusDeviceID" Padding="5,0" Text="1" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusDeviceID_PreviewTextInput" TextChanged="ModbusDeviceID_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Width="150" Content="Max. Register"/>
|
<Label Width="150" Content="Max. Register"/>
|
||||||
<TextBox x:Name="ModbusMaxRegister" Text="2000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusMaxRegister_PreviewTextInput" TextChanged="ModbusMaxRegister_TextChanged"/>
|
<TextBox x:Name="ModbusMaxRegister" Padding="5,0" Text="2000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="ModbusMaxRegister_PreviewTextInput" TextChanged="ModbusMaxRegister_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Header="VX-3000">
|
<GroupBox Header="VX-3000">
|
||||||
<DockPanel Margin="-1,0,1,0">
|
<DockPanel Margin="-1,0,1,0">
|
||||||
<Button x:Name="btnApplyVX3KConfig" Content="Apply Config" Margin="5" Click="ApplyVX3KConfig" DockPanel.Dock="Right"/>
|
<Button x:Name="btnApplyVX3KConfig" Content="Apply Config" Margin="5,0" Padding="5,0" Click="ApplyVX3KConfig" DockPanel.Dock="Right"/>
|
||||||
<StackPanel Orientation="Vertical">
|
<StackPanel Orientation="Vertical">
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Width="150" Content="VX-3000 IP" />
|
<Label Width="150" Content="VX-3000 IP" />
|
||||||
<TextBox x:Name="VX3K_IP" Text="192.168.14.1" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="VX3K_IP_PreviewTextInput" TextChanged="VX3K_IP_TextChanged"/>
|
<TextBox x:Name="VX3K_IP" Padding="5,0" Text="192.168.14.1" MinWidth="75" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="VX3K_IP_PreviewTextInput" TextChanged="VX3K_IP_TextChanged"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
<StackPanel Orientation="Horizontal">
|
<StackPanel Orientation="Horizontal" Margin="0,5">
|
||||||
<Label Width="150" Content="VX-3000 Port" />
|
<Label Width="150" Content="VX-3000 Port" />
|
||||||
<TextBox x:Name="VX3K_Port" Text="5000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="VX3K_Port_PreviewTextInput" TextChanged="VX3K_Port_TextChanged" />
|
<TextBox x:Name="VX3K_Port" Padding="5,0" Text="5000" MinWidth="50" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" PreviewTextInput="VX3K_Port_PreviewTextInput" TextChanged="VX3K_Port_TextChanged" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Text.Json;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
@@ -55,6 +57,9 @@ namespace FAtoPA.Net
|
|||||||
// Isi VX Table
|
// Isi VX Table
|
||||||
ObservableCollection<VXData> VXTableMember { get; set; }
|
ObservableCollection<VXData> VXTableMember { get; set; }
|
||||||
|
|
||||||
|
// tabel translation FSM Status String to Modbus Register Value
|
||||||
|
public ObservableCollection<KeyValuePair<String, Int16>> ModbusTranslationTable { get; set; }
|
||||||
|
|
||||||
public List<String> ConditionON;
|
public List<String> ConditionON;
|
||||||
public List<String> ConditionOFF;
|
public List<String> ConditionOFF;
|
||||||
|
|
||||||
@@ -65,6 +70,8 @@ namespace FAtoPA.Net
|
|||||||
// Di-isi dengan user input di Tab Fire Alarm
|
// Di-isi dengan user input di Tab Fire Alarm
|
||||||
FSMSIID = new ObservableCollection<string>();
|
FSMSIID = new ObservableCollection<string>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Isinya ada di Window_Loaded
|
// Isinya ada di Window_Loaded
|
||||||
ModbusRegisters = new ObservableCollection<int>();
|
ModbusRegisters = new ObservableCollection<int>();
|
||||||
FsmTableMember = new ObservableCollection<FSMData>();
|
FsmTableMember = new ObservableCollection<FSMData>();
|
||||||
@@ -105,17 +112,121 @@ namespace FAtoPA.Net
|
|||||||
|
|
||||||
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
siType.ItemsSource = Enum.GetValues(typeof(SIType)).Cast<SIType>().ToList();
|
||||||
|
|
||||||
this.DataContext = this;
|
|
||||||
|
|
||||||
//TODO : Add Condition for ON and OFF
|
//TODO : Add Condition for ON and OFF
|
||||||
ConditionON = new List<string>();
|
ConditionON = new List<string>();
|
||||||
ConditionON.Add(SILogicalState.ACTIVATION.ToString());
|
ConditionON.Add(SILogicalState.ACTIVATION.ToString());
|
||||||
ConditionON.Add(SILogicalState.FIRE.ToString());
|
ConditionON.Add(SILogicalState.FIRE.ToString());
|
||||||
|
|
||||||
ConditionOFF = new List<string>();
|
ConditionOFF = new List<string>();
|
||||||
ConditionOFF.Add(SILogicalState.NORMAL.ToString());
|
ConditionOFF.Add(SILogicalState.NORMAL.ToString());
|
||||||
|
|
||||||
|
Load_ModbusTranslationTable();
|
||||||
|
|
||||||
|
DataContext = this;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Load Modbus Translation Table from JSON File
|
||||||
|
/// </summary>
|
||||||
|
private void Load_ModbusTranslationTable()
|
||||||
|
{
|
||||||
|
if (File.Exists("ModbusTranslationTable.json"))
|
||||||
|
{
|
||||||
|
String loadedJson = File.ReadAllText("ModbusTranslationTable.json");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ModbusTranslationTable = JsonSerializer.Deserialize<ObservableCollection<KeyValuePair<string, short>>>(loadedJson);
|
||||||
|
Debug.WriteLine("ModbusTranslationTable loaded");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Error loading ModbusTranslationTable : " + ex.Message);
|
||||||
|
Create_Default_ModbusTranslationTable();
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Debug.WriteLine("ModbusTranslationTable.json not found, creating default");
|
||||||
|
Create_Default_ModbusTranslationTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Create Default Modbus Translation Table
|
||||||
|
/// <para>It also save the default table to JSON File</para>
|
||||||
|
/// </summary>
|
||||||
|
private void Create_Default_ModbusTranslationTable()
|
||||||
|
{
|
||||||
|
ModbusTranslationTable = new ObservableCollection<KeyValuePair<string, short>>();
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INVALID.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.NORMAL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TROUBLE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE_PRE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.VERIFY_FIRE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.HEAT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.SUPERVISORY.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.SMOKE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ACTIVATION.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ACTIVATION_FAILED.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TAMPER.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.COVER_OPEN.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAPER_OUT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.TROUBLE_LIGHT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WATCHDOGRESTART.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ON.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.OFF.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POLLUTION.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POLLUTION_LIGHT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MONITOR.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WATER.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.POWERFAIL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MANUAL_ALARM.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAS_WAIT_FOR_ACK.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.PAS_INVESTIGATE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_CHANGED.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_COUNTDOWN_STARTED.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.AC_TAMPER.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.FIRE_INT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.ERROR.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.UNKNOWN.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MATCHALL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.NET_CONFIG_MISMATCH.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.UNKNOWN_ITEM.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.MISSING_ITEM.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INCOMPATIBLE_SOFTWARE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INCOMPATIBLE_NET_PROTOCOL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.INFO_ALARM.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.CHEMICAL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_HEAT.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_SMOKE.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.WARNING_CHEMICAL.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.REBOOT_READY.ToString(), 0));
|
||||||
|
ModbusTranslationTable.Add(new KeyValuePair<string, short>(SILogicalState.LASTLOGICAL.ToString(), 0));
|
||||||
|
Save_ModbusTranslationTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Save Modbus Translation Table to JSON File
|
||||||
|
/// </summary>
|
||||||
|
private void Save_ModbusTranslationTable()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String json = JsonSerializer.Serialize(ModbusTranslationTable);
|
||||||
|
File.WriteAllText("ModbusTranslationTable.json", json);
|
||||||
|
Debug.WriteLine("ModbusTranslationTable saved");
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Error saving ModbusTranslationTable : " + e.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
private void Window_Loaded(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Window Loaded");
|
Debug.WriteLine("Window Loaded");
|
||||||
@@ -167,6 +278,7 @@ namespace FAtoPA.Net
|
|||||||
FSMTable.ItemsSource = FsmTableMember;
|
FSMTable.ItemsSource = FsmTableMember;
|
||||||
ModbusTable.ItemsSource = ModbusTableMember;
|
ModbusTable.ItemsSource = ModbusTableMember;
|
||||||
VXTable.ItemsSource = VXTableMember;
|
VXTable.ItemsSource = VXTableMember;
|
||||||
|
FSMtoModbusTranslationTable.ItemsSource = ModbusTranslationTable;
|
||||||
|
|
||||||
// Load FSM
|
// Load FSM
|
||||||
fsmEvent = new FSMEvent(this.firealarmstatusbar);
|
fsmEvent = new FSMEvent(this.firealarmstatusbar);
|
||||||
@@ -198,6 +310,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, ConditionON, ConditionOFF));
|
fsm.AddListener(new ModbusTriggerFromFSM(FsmTableMember, ModbusTableMember, modbusSlave, ConditionON, ConditionOFF));
|
||||||
fsm.AddListener(new VXTriggerFromFSM(FsmTableMember, VXTableMember, vx3k, ConditionON, ConditionOFF));
|
fsm.AddListener(new VXTriggerFromFSM(FsmTableMember, VXTableMember, vx3k, ConditionON, ConditionOFF));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Timer1s_Tick(object sender, EventArgs e)
|
private void Timer1s_Tick(object sender, EventArgs e)
|
||||||
@@ -788,33 +901,6 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btnAddSIID_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
SIID selected = GetSIID();
|
|
||||||
if (selected != null)
|
|
||||||
{
|
|
||||||
MessageBoxResult result = MessageBox.Show("Add SIID " + selected.ToString() + " ?", "Add SIID", MessageBoxButton.YesNo);
|
|
||||||
if (result == MessageBoxResult.Yes)
|
|
||||||
{
|
|
||||||
if (database != null)
|
|
||||||
{
|
|
||||||
//TODO Manual Add SIID, perlukah ?
|
|
||||||
|
|
||||||
//FSMData f = new FSMData(selected.ToString());
|
|
||||||
//if (database.AddFSMData(f))
|
|
||||||
//{
|
|
||||||
// FSMTable.ItemsSource = database.GetFSMDatas();
|
|
||||||
// FSMSIID.Add(selected.ToString());
|
|
||||||
//}
|
|
||||||
//else MessageBox.Show("Failed to add to database");
|
|
||||||
}
|
|
||||||
else MessageBox.Show("Database is null");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else MessageBox.Show("Invalid Selection");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnDelSIID_Click(object sender, RoutedEventArgs e)
|
private void btnDelSIID_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
if (FSMTable != null)
|
if (FSMTable != null)
|
||||||
@@ -846,39 +932,6 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private SIID GetSIID()
|
|
||||||
{
|
|
||||||
int netgroup = 0;
|
|
||||||
int netnode = 0;
|
|
||||||
SIType sitype = 0;
|
|
||||||
int sinumber = 0;
|
|
||||||
int sisub = 0;
|
|
||||||
|
|
||||||
if (netGroupNumber.SelectedItem != null)
|
|
||||||
{
|
|
||||||
netgroup = (int)netGroupNumber.SelectedItem;
|
|
||||||
if (netNodeNumber.SelectedItem != null)
|
|
||||||
{
|
|
||||||
netnode = (int)netNodeNumber.SelectedItem;
|
|
||||||
if (siType.SelectedItem != null)
|
|
||||||
{
|
|
||||||
sitype = (SIType)siType.SelectedItem;
|
|
||||||
if (siNumber.SelectedItem != null)
|
|
||||||
{
|
|
||||||
sinumber = (int)siNumber.SelectedItem;
|
|
||||||
if (siSub.SelectedItem != null)
|
|
||||||
{
|
|
||||||
sisub = (int)siSub.SelectedItem;
|
|
||||||
|
|
||||||
return new SIID((byte)netgroup, (byte)netnode, sitype, (ushort)sinumber, (byte)sisub);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnAddModbus_Click(object sender, RoutedEventArgs e)
|
private void btnAddModbus_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
@@ -1123,9 +1176,68 @@ namespace FAtoPA.Net
|
|||||||
else MessageBox.Show("Selected SIID dont have NodeData");
|
else MessageBox.Show("Selected SIID dont have NodeData");
|
||||||
} else MessageBox.Show("No SIID Selected");
|
} else MessageBox.Show("No SIID Selected");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void FSMtoModbusTranslationTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("FSMtoModbusTranslationTable_AutoGeneratingColumn : " + e.PropertyName);
|
||||||
|
switch (e.PropertyName)
|
||||||
|
{
|
||||||
|
case "Key":
|
||||||
|
e.Column.Width = DataGridLength.Auto;
|
||||||
|
break;
|
||||||
|
case "Value":
|
||||||
|
e.Column.Width = DataGridLength.Auto;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FSMtoModbusTranslationTable_MouseDoubleClick(object sender, MouseButtonEventArgs e)
|
||||||
|
{
|
||||||
|
var selected = (sender as DataGrid).SelectedItem;
|
||||||
|
|
||||||
|
if (selected != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
KeyValuePair<String, Int16> vv = (KeyValuePair<String, Int16>)selected;
|
||||||
|
Debug.WriteLine($"Selected Key={vv.Key}, Value={vv.Value}");
|
||||||
|
//TODO create InputBox to select Value for Key
|
||||||
|
} catch(Exception exception)
|
||||||
|
{
|
||||||
|
Debug.WriteLine("FSMtoModbusTranslationTable_MouseDoubleClick Error : " + exception.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else Debug.WriteLine("Not selected yet");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetFSMtoModbusTranslationTable_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show($"Reset FSM to Modbus Translation Table ?", "Reset FSM to Modbus Translation Table", MessageBoxButton.YesNo);
|
||||||
|
if (result == MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
Create_Default_ModbusTranslationTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetFSMtoModbusTranslationTable_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var result = MessageBox.Show($"Save FSM to Modbus Translation Table ?", "Save FSM to Modbus Translation Table", MessageBoxButton.YesNo);
|
||||||
|
if (result == MessageBoxResult.Yes)
|
||||||
|
{
|
||||||
|
Save_ModbusTranslationTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// event handler for VX3K
|
/// <summary>
|
||||||
|
/// Event Handler for VX3K
|
||||||
|
/// </summary>
|
||||||
class VX3KEvent : EventInterface
|
class VX3KEvent : EventInterface
|
||||||
{
|
{
|
||||||
private TextBlock statusbar;
|
private TextBlock statusbar;
|
||||||
@@ -1150,6 +1262,9 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event Handler for Modbus
|
||||||
|
/// </summary>
|
||||||
class ModbusEvent : ModbusSlaveEvent
|
class ModbusEvent : ModbusSlaveEvent
|
||||||
{
|
{
|
||||||
private TextBlock statusbar;
|
private TextBlock statusbar;
|
||||||
@@ -1173,12 +1288,8 @@ namespace FAtoPA.Net
|
|||||||
connectedlist.Items.Clear();
|
connectedlist.Items.Clear();
|
||||||
foreach (ModbusClientRecord client in ModbusSlave)
|
foreach (ModbusClientRecord client in ModbusSlave)
|
||||||
{
|
{
|
||||||
TextBlock l = new TextBlock();
|
TextBlock l = new TextBlock() { Margin=new Thickness(5,0,5,0), TextWrapping=TextWrapping.Wrap, Width=connectedlist.Width, Tag = client, Height=50 };
|
||||||
l.Width = connectedlist.Width;
|
|
||||||
l.Margin = new Thickness(5, 0, 5, 0);
|
|
||||||
l.TextWrapping = TextWrapping.Wrap;
|
|
||||||
UpdateLabel(l, client);
|
UpdateLabel(l, client);
|
||||||
l.Tag = client;
|
|
||||||
connectedlist.Items.Add(l);
|
connectedlist.Items.Add(l);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1233,6 +1344,9 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event Handler for Bosch FSM
|
||||||
|
/// </summary>
|
||||||
class FSMEvent : EventInterface
|
class FSMEvent : EventInterface
|
||||||
{
|
{
|
||||||
private TextBlock statusbar;
|
private TextBlock statusbar;
|
||||||
@@ -1275,7 +1389,9 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Class ini untuk update Table FSM
|
/// <summary>
|
||||||
|
/// Class ini untuk update Table FSM
|
||||||
|
/// </summary>
|
||||||
class FSMTableUpdater : FSMResultInterface
|
class FSMTableUpdater : FSMResultInterface
|
||||||
{
|
{
|
||||||
// dari database
|
// dari database
|
||||||
@@ -1289,6 +1405,11 @@ namespace FAtoPA.Net
|
|||||||
this.countlabel = countlabel;
|
this.countlabel = countlabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Method ini untuk menambahkan SIID yang muncul dari FSM ke Listbox
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="SIID">SIID yang muncul</param>
|
||||||
|
/// <param name="type">Tipe nya</param>
|
||||||
public void DiscoveredSIID(string SIID, NodeData type)
|
public void DiscoveredSIID(string SIID, NodeData type)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Discovered SIID={SIID} Label={type.Label} Type={type.Description}");
|
Debug.WriteLine($"Discovered SIID={SIID} Label={type.Label} Type={type.Description}");
|
||||||
@@ -1299,7 +1420,7 @@ namespace FAtoPA.Net
|
|||||||
// yang punya Label dan Description saja yang masuk ke Listbox dan dihitung
|
// yang punya Label dan Description saja yang masuk ke Listbox dan dihitung
|
||||||
Application.Current.Dispatcher.Invoke(() =>
|
Application.Current.Dispatcher.Invoke(() =>
|
||||||
{
|
{
|
||||||
listbox.Items.Add(new Label() { Content = $"{SIID} : {type.Label} : {type.Description}", Tag = type });
|
listbox.Items.Add(new Label() { Content = $"{SIID} : {type.Label} : {type.Description}", Tag = type, Height=50 });
|
||||||
countlabel.Content = "Count : " + listbox.Items.Count;
|
countlabel.Content = "Count : " + listbox.Items.Count;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1308,7 +1429,12 @@ namespace FAtoPA.Net
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Method ini untuk mengupdate State SIID yang ada di FSM
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="SIID">SIID yang muncul</param>
|
||||||
|
/// <param name="previous">Previous State kalau ada</param>
|
||||||
|
/// <param name="current">State sekarang</param>
|
||||||
public void NewState(string SIID, NodeState previous, NodeState current)
|
public void NewState(string SIID, NodeState previous, NodeState current)
|
||||||
{
|
{
|
||||||
Debug.WriteLine("New State : " + SIID + " Previous : " + previous?.LogicalState + " Current : " + current.LogicalState);
|
Debug.WriteLine("New State : " + SIID + " Previous : " + previous?.LogicalState + " Current : " + current.LogicalState);
|
||||||
@@ -1334,7 +1460,9 @@ namespace FAtoPA.Net
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Class ini untuk Update Modbus Register dari FSM Update
|
/// <summary>
|
||||||
|
/// Class ini untuk Update Modbus Register dari FSM Update
|
||||||
|
/// </summary>
|
||||||
class ModbusTriggerFromFSM : FSMResultInterface
|
class ModbusTriggerFromFSM : FSMResultInterface
|
||||||
{
|
{
|
||||||
// dari database
|
// dari database
|
||||||
@@ -1351,12 +1479,19 @@ namespace FAtoPA.Net
|
|||||||
ConditionON = conditionON;
|
ConditionON = conditionON;
|
||||||
ConditionOFF = conditionOFF;
|
ConditionOFF = conditionOFF;
|
||||||
}
|
}
|
||||||
public void DiscoveredSIID(string SIID, NodeData type)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
/// <summary>
|
||||||
|
/// Tidak dipakai
|
||||||
|
/// </summary>
|
||||||
|
void FSMResultInterface.DiscoveredSIID(string SIID, NodeData type) { }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ada State baru dari FSM, Action to Modbus
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="SIID">SIID yang muncul</param>
|
||||||
|
/// <param name="previous">Previous State kalau ada</param>
|
||||||
|
/// <param name="current">State sekarang</param>
|
||||||
public void NewState(string SIID, NodeState previous, NodeState current)
|
public void NewState(string SIID, NodeState previous, NodeState current)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -1427,7 +1562,9 @@ namespace FAtoPA.Net
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Class ini untuk Trigger VX3K dari FSM Update
|
/// <summary>
|
||||||
|
/// Class ini untuk Trigger VX3K dari FSM Update
|
||||||
|
/// </summary>
|
||||||
class VXTriggerFromFSM : FSMResultInterface
|
class VXTriggerFromFSM : FSMResultInterface
|
||||||
{
|
{
|
||||||
ObservableCollection<VXData> data;
|
ObservableCollection<VXData> data;
|
||||||
@@ -1443,12 +1580,19 @@ namespace FAtoPA.Net
|
|||||||
ConditionON = conditionON;
|
ConditionON = conditionON;
|
||||||
ConditionOFF = conditionOFF;
|
ConditionOFF = conditionOFF;
|
||||||
}
|
}
|
||||||
public void DiscoveredSIID(string SIID, NodeData type)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
/// <summary>
|
||||||
|
/// Event Discovered SIID, tidak dipakai di sini
|
||||||
|
/// </summary>
|
||||||
|
void FSMResultInterface.DiscoveredSIID(string SIID, NodeData type) { }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ada State baru dari FSM, Action to VX 3K
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="SIID">SIID yang muncul</param>
|
||||||
|
/// <param name="previous">Previous state kalau ada</param>
|
||||||
|
/// <param name="current">State sekarang</param>
|
||||||
public void NewState(string SIID, NodeState previous, NodeState current)
|
public void NewState(string SIID, NodeState previous, NodeState current)
|
||||||
{
|
{
|
||||||
FSMData src = null;
|
FSMData src = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user