Add cross-platform OPC UA client stack: shared library, CLI tool, and Avalonia UI
Implements Client.Shared (IOpcUaClientService with connection lifecycle, failover, browse, read/write, subscriptions, alarms, history, redundancy), Client.CLI (8 CliFx commands mirroring tools/opcuacli-dotnet), and Client.UI (Avalonia desktop app with tree browser, read/write, subscriptions, alarms, and history tabs). All three target .NET 10 and are covered by 249 unit tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
36
src/ZB.MOM.WW.LmxOpcUa.Client.UI/Views/AlarmsView.axaml
Normal file
36
src/ZB.MOM.WW.LmxOpcUa.Client.UI/Views/AlarmsView.axaml
Normal file
@@ -0,0 +1,36 @@
|
||||
<UserControl xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:ZB.MOM.WW.LmxOpcUa.Client.UI.ViewModels"
|
||||
x:Class="ZB.MOM.WW.LmxOpcUa.Client.UI.Views.AlarmsView"
|
||||
x:DataType="vm:AlarmsViewModel">
|
||||
<DockPanel Margin="8">
|
||||
<!-- Controls -->
|
||||
<StackPanel DockPanel.Dock="Top" Spacing="8">
|
||||
<TextBlock Text="Alarm Monitoring" FontWeight="Bold" />
|
||||
<StackPanel Orientation="Horizontal" Spacing="8">
|
||||
<TextBox Text="{Binding MonitoredNodeIdText}" Width="250" Watermark="Source Node ID (optional)" />
|
||||
<NumericUpDown Value="{Binding Interval}" Minimum="100" Maximum="60000" Width="120" />
|
||||
<Button Content="Subscribe" Command="{Binding SubscribeCommand}" />
|
||||
<Button Content="Unsubscribe" Command="{Binding UnsubscribeCommand}" />
|
||||
<Button Content="Refresh" Command="{Binding RefreshCommand}" />
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Alarm Events -->
|
||||
<DataGrid ItemsSource="{Binding AlarmEvents}"
|
||||
AutoGenerateColumns="False"
|
||||
IsReadOnly="True"
|
||||
Margin="0,8,0,0">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Time" Binding="{Binding Time}" Width="180" />
|
||||
<DataGridTextColumn Header="Source" Binding="{Binding SourceName}" Width="120" />
|
||||
<DataGridTextColumn Header="Condition" Binding="{Binding ConditionName}" Width="120" />
|
||||
<DataGridTextColumn Header="Severity" Binding="{Binding Severity}" Width="80" />
|
||||
<DataGridTextColumn Header="Message" Binding="{Binding Message}" Width="200" />
|
||||
<DataGridCheckBoxColumn Header="Active" Binding="{Binding ActiveState}" Width="60" />
|
||||
<DataGridCheckBoxColumn Header="Acked" Binding="{Binding AckedState}" Width="60" />
|
||||
<DataGridCheckBoxColumn Header="Retain" Binding="{Binding Retain}" Width="60" />
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</DockPanel>
|
||||
</UserControl>
|
||||
Reference in New Issue
Block a user