PickScrewAccuracyAnalyzer.xaml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <UserControl x:Class="TeamAAS_VP.Views.Home.PickScrewAccuracyAnalyzer"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:prism="http://prismlibrary.com/"
  5. xmlns:wf="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"
  6. xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
  7. xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
  8. xmlns:sys="clr-namespace:System;assembly=mscorlib"
  9. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  10. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  11. xmlns:vm="clr-namespace:TeamAAS_VP.ViewModels.Product"
  12. xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
  13. xmlns:lex="http://wpflocalizeextension.codeplex.com"
  14. lex:LocalizeDictionary.DesignCulture="zh-CN"
  15. lex:ResxLocalizationProvider.DefaultAssembly="TeamAAS-VP"
  16. lex:ResxLocalizationProvider.DefaultDictionary="Lang"
  17. prism:ViewModelLocator.AutoWireViewModel="True"
  18. mc:Ignorable="d"
  19. d:DataContext="{d:DesignInstance Type=vm:VisionDynamicAccuracyAnalyzerViewModel}"
  20. d:Height="1100"
  21. d:Width="1000"
  22. MinHeight="500"
  23. MinWidth="500"
  24. d:Background="White"
  25. HorizontalAlignment="Stretch"
  26. VerticalAlignment="Stretch"
  27. FontFamily="{DynamicResource DefaultFont}">
  28. <b:Interaction.Triggers>
  29. <b:EventTrigger EventName="Loaded">
  30. <b:InvokeCommandAction Command="{Binding LoadedCommand}" />
  31. </b:EventTrigger>
  32. </b:Interaction.Triggers>
  33. <prism:Dialog.WindowStyle>
  34. <Style TargetType="Window">
  35. <Setter Property="prism:Dialog.WindowStartupLocation"
  36. Value="CenterScreen" />
  37. <Setter Property="AllowDrop"
  38. Value="True" />
  39. <Setter Property="ShowInTaskbar"
  40. Value="True" />
  41. <Setter Property="MinHeight"
  42. Value="500" />
  43. <Setter Property="MinWidth"
  44. Value="500" />
  45. <Setter Property="WindowState"
  46. Value="Normal" />
  47. <Setter Property="Topmost"
  48. Value="False" />
  49. </Style>
  50. </prism:Dialog.WindowStyle>
  51. <UserControl.Resources>
  52. <!-- 复用静态测试的样式 -->
  53. <Style TargetType="Button"
  54. BasedOn="{StaticResource MaterialDesignFlatDarkBgButton}">
  55. <Setter Property="Padding"
  56. Value="10 5" />
  57. <Setter Property="Margin"
  58. Value="5" />
  59. <Setter Property="FontSize"
  60. Value="14" />
  61. <Setter Property="BorderThickness"
  62. Value="0" />
  63. </Style>
  64. <Style TargetType="TextBlock">
  65. <Setter Property="VerticalAlignment"
  66. Value="Center" />
  67. <Setter Property="Margin"
  68. Value="5" />
  69. </Style>
  70. <Style TargetType="TextBox"
  71. BasedOn="{StaticResource MaterialDesignTextBox}">
  72. <Setter Property="Margin"
  73. Value="5" />
  74. <Setter Property="VerticalContentAlignment"
  75. Value="Center" />
  76. </Style>
  77. <Style x:Key="DataGridStyle"
  78. TargetType="DataGrid"
  79. BasedOn="{StaticResource MaterialDesignDataGrid}">
  80. <Setter Property="Margin"
  81. Value="5" />
  82. <Setter Property="AutoGenerateColumns"
  83. Value="False" />
  84. <Setter Property="CanUserAddRows"
  85. Value="False" />
  86. <Setter Property="CanUserDeleteRows"
  87. Value="False" />
  88. <Setter Property="IsReadOnly"
  89. Value="True" />
  90. <Setter Property="AlternatingRowBackground"
  91. Value="#F5F5F5" />
  92. </Style>
  93. <Style x:Key="TitleStyle"
  94. TargetType="TextBlock">
  95. <Setter Property="FontSize"
  96. Value="16" />
  97. <Setter Property="FontWeight"
  98. Value="Bold" />
  99. <Setter Property="Margin"
  100. Value="0 10 0 5" />
  101. <Setter Property="Foreground"
  102. Value="#2C3E50" />
  103. </Style>
  104. </UserControl.Resources>
  105. <Grid>
  106. <ScrollViewer>
  107. <Border Grid.Column="0"
  108. BorderBrush="#BDC3C7"
  109. BorderThickness="0 0 1 0">
  110. <Grid>
  111. <Grid.RowDefinitions>
  112. <RowDefinition Height="Auto" />
  113. <RowDefinition Height="Auto" />
  114. <RowDefinition Height="Auto" />
  115. <RowDefinition Height="Auto" />
  116. <RowDefinition Height="*"
  117. MinHeight="150" />
  118. <RowDefinition Height="Auto" />
  119. </Grid.RowDefinitions>
  120. <!-- 机器人位置 -->
  121. <Border Grid.Row="0"
  122. Background="#ECF0F1"
  123. Padding="10">
  124. <StackPanel>
  125. <TextBlock Style="{StaticResource TitleStyle}"
  126. Text="机器人位置" />
  127. <Grid Margin="0 10 0 0">
  128. <Grid.RowDefinitions>
  129. <RowDefinition Height="Auto" />
  130. <RowDefinition Height="Auto" />
  131. <RowDefinition Height="Auto" />
  132. </Grid.RowDefinitions>
  133. <Grid Grid.Row="0"
  134. Margin="0 0 0 10">
  135. <Grid.ColumnDefinitions>
  136. <ColumnDefinition Width="Auto" />
  137. <ColumnDefinition Width="*" />
  138. <ColumnDefinition Width="Auto" />
  139. </Grid.ColumnDefinitions>
  140. <TextBlock Text="取料坐标:"
  141. Grid.Column="0"
  142. VerticalAlignment="Center" />
  143. <TextBox Grid.Column="1"
  144. d:Text="X:0.000 Y:0.000 Z:0.000"
  145. ToolTip="机器人A点位置坐标"
  146. IsReadOnly="True"
  147. Background="#F8F9FA">
  148. <TextBox.Text>
  149. <MultiBinding StringFormat="X:{0:f3} Y:{1:f3} Z:{2:f3}">
  150. <Binding Path="Points.TorquePoints[1].X_Position" />
  151. <Binding Path="Points.TorquePoints[1].Y_Position" />
  152. <Binding Path="Points.TorquePoints[1].Z_Position_Start" />
  153. </MultiBinding>
  154. </TextBox.Text>
  155. </TextBox>
  156. <!--<Button Grid.Column="2"
  157. Content="示教"
  158. Command="{Binding TeachPointACommand}"
  159. Background="#3498DB"
  160. Foreground="White"
  161. Width="60"
  162. Margin="5,0,0,0" />-->
  163. </Grid>
  164. <Grid Grid.Row="1"
  165. Margin="0 0 0 10">
  166. <Grid.ColumnDefinitions>
  167. <ColumnDefinition Width="Auto" />
  168. <ColumnDefinition Width="*" />
  169. <ColumnDefinition Width="Auto" />
  170. </Grid.ColumnDefinitions>
  171. <TextBlock Text="抛料坐标:"
  172. Grid.Column="0"
  173. VerticalAlignment="Center" />
  174. <TextBox Grid.Column="1"
  175. d:Text="X:100.000 Y:50.000 Z:0.000"
  176. ToolTip="机器人B点拍照位置坐标"
  177. IsReadOnly="True"
  178. Background="#F8F9FA">
  179. <TextBox.Text>
  180. <MultiBinding StringFormat="X:{0:f3} Y:{1:f3} Z:{2:f3}">
  181. <Binding Path="Points.TorquePoints[0].X_Position" />
  182. <Binding Path="Points.TorquePoints[0].Y_Position" />
  183. <Binding Path="Points.TorquePoints[0].Z_Position_Start" />
  184. </MultiBinding>
  185. </TextBox.Text>
  186. </TextBox>
  187. <!--<Button Grid.Column="2"
  188. Content="示教"
  189. Command="{Binding TeachPointBCommand}"
  190. Background="#3498DB"
  191. Foreground="White"
  192. Width="60"
  193. Margin="5,0,0,0" />-->
  194. </Grid>
  195. </Grid>
  196. </StackPanel>
  197. </Border>
  198. <!-- 测试参数设置 -->
  199. <Border Grid.Row="1"
  200. Background="#F8F9FA"
  201. Padding="10">
  202. <StackPanel>
  203. <TextBlock Style="{StaticResource TitleStyle}"
  204. Text="测试参数设置" />
  205. <Grid Margin="0 10 0 0">
  206. <Grid.ColumnDefinitions>
  207. <ColumnDefinition Width="*" />
  208. <ColumnDefinition Width="*" />
  209. </Grid.ColumnDefinitions>
  210. <!-- 重复次数 -->
  211. <StackPanel Grid.Column="0">
  212. <TextBlock Text="重复次数:" />
  213. <mah:NumericUpDown Value="{Binding RepeatCount, Mode=TwoWay}"
  214. Minimum="1"
  215. Maximum="1000"
  216. d:Value="50"
  217. TextAlignment="Center"
  218. HorizontalContentAlignment="Center"
  219. HorizontalAlignment="Stretch"
  220. IsEnabled="{Binding IsRunning, Converter={StaticResource InvertBooleanConverter}}" />
  221. </StackPanel>
  222. <!-- 移动速度 -->
  223. <StackPanel Grid.Column="1"
  224. Margin="10,0,0,0">
  225. <TextBlock Text="移动速度(%):" />
  226. <mah:NumericUpDown Value="{Binding MoveSpeed, Mode=TwoWay}"
  227. Minimum="1"
  228. Maximum="100"
  229. d:Value="50"
  230. TextAlignment="Center"
  231. HorizontalContentAlignment="Center"
  232. HorizontalAlignment="Stretch"
  233. IsEnabled="{Binding IsRunning, Converter={StaticResource InvertBooleanConverter}}" />
  234. </StackPanel>
  235. </Grid>
  236. </StackPanel>
  237. </Border>
  238. <!-- 测试控制区域 -->
  239. <Border Grid.Row="2"
  240. Background="#ECF0F1"
  241. Padding="10">
  242. <StackPanel>
  243. <TextBlock Style="{StaticResource TitleStyle}"
  244. Text="测试控制" />
  245. <WrapPanel HorizontalAlignment="Center"
  246. Margin="0 10 0 0">
  247. <!--<Button Content="单次测试"
  248. Background="#3498DB"
  249. Foreground="White"
  250. MinWidth="100"
  251. Height="35"
  252. FontWeight="Bold"
  253. Command="{Binding SingleTestCommand}"
  254. IsEnabled="{Binding IsRunning, Converter={StaticResource InvertBooleanConverter}}" />-->
  255. <Button Content="连续测试"
  256. Background="#27AE60"
  257. Foreground="White"
  258. MinWidth="100"
  259. Height="35"
  260. FontWeight="Bold"
  261. Command="{Binding StartTestCommand}" />
  262. <Button Content="停止"
  263. Background="#E74C3C"
  264. Foreground="White"
  265. MinWidth="100"
  266. Height="35"
  267. Command="{Binding StopTestCommand}" />
  268. <Button Content="暂停"
  269. Background="#F39C12"
  270. Foreground="White"
  271. MinWidth="100"
  272. Height="35"
  273. Command="{Binding PauseTestCommand}" />
  274. </WrapPanel>
  275. </StackPanel>
  276. </Border>
  277. <!-- 进度显示 -->
  278. <Border Grid.Row="3"
  279. Background="White"
  280. Padding="10">
  281. <StackPanel>
  282. <TextBlock Style="{StaticResource TitleStyle}"
  283. Text="测试进度" />
  284. <Grid Margin="0 10 0 0">
  285. <Grid.RowDefinitions>
  286. <RowDefinition Height="Auto" />
  287. <RowDefinition Height="Auto" />
  288. </Grid.RowDefinitions>
  289. <ProgressBar Grid.Row="0"
  290. Height="25"
  291. Margin="5"
  292. Minimum="0"
  293. Maximum="{Binding RepeatCount}"
  294. Value="{Binding CurrentProgress}"
  295. IsEnabled="False"
  296. d:Maximum="100"
  297. d:Value="50" />
  298. <TextBlock Grid.Row="1"
  299. HorizontalAlignment="Center"
  300. FontSize="12"
  301. Foreground="#7F8C8D"
  302. d:Text="等待开始..."
  303. Text="{Binding Message}" />
  304. </Grid>
  305. <!-- 实时统计信息 -->
  306. <WrapPanel Margin="0 15 0 0"
  307. HorizontalAlignment="Center">
  308. <Border Background="#3498DB"
  309. Padding="10 5"
  310. Margin="5"
  311. CornerRadius="3">
  312. <StackPanel>
  313. <TextBlock Text="当前循环"
  314. Foreground="White"
  315. FontSize="11" />
  316. <TextBlock Text="{Binding CurrentProgress}"
  317. d:Text="1"
  318. Foreground="White"
  319. FontSize="16"
  320. FontWeight="Bold"
  321. HorizontalAlignment="Center" />
  322. </StackPanel>
  323. </Border>
  324. <Border Background="#2ECC71"
  325. Padding="10 5"
  326. Margin="5"
  327. CornerRadius="3">
  328. <StackPanel>
  329. <TextBlock Text="成功率"
  330. Foreground="White"
  331. FontSize="11" />
  332. <TextBlock Text="{Binding SuccessRate, StringFormat={}{0:F1}%}"
  333. d:Text="100%"
  334. Foreground="White"
  335. FontSize="16"
  336. FontWeight="Bold"
  337. HorizontalAlignment="Center" />
  338. </StackPanel>
  339. </Border>
  340. <Border Background="#9B59B6"
  341. Padding="10 5"
  342. Margin="5"
  343. CornerRadius="3">
  344. <StackPanel>
  345. <TextBlock Text="往返时间"
  346. Foreground="White"
  347. FontSize="11" />
  348. <TextBlock Text="{Binding CycleTime, StringFormat={}{0:F2}s}"
  349. d:Text="2.34s"
  350. Foreground="White"
  351. FontSize="16"
  352. FontWeight="Bold"
  353. HorizontalAlignment="Center" />
  354. </StackPanel>
  355. </Border>
  356. </WrapPanel>
  357. </StackPanel>
  358. </Border>
  359. <!-- 测试结果列表 -->
  360. <Border Grid.Row="4"
  361. Background="White"
  362. Padding="10">
  363. <Grid>
  364. <Grid.RowDefinitions>
  365. <RowDefinition Height="Auto" />
  366. <RowDefinition Height="*" />
  367. </Grid.RowDefinitions>
  368. <StackPanel Grid.Row="0"
  369. Orientation="Horizontal">
  370. <TextBlock Style="{StaticResource TitleStyle}"
  371. Text="测试结果列表" />
  372. <TextBlock Margin="10,0,0,0"
  373. VerticalAlignment="Center"
  374. Foreground="#7F8C8D"
  375. Text="(显示最近20次结果)" />
  376. </StackPanel>
  377. <DataGrid x:Name="dgResults"
  378. Grid.Row="1"
  379. Style="{StaticResource DataGridStyle}"
  380. MaxHeight="250"
  381. AutoGenerateColumns="False"
  382. CanUserAddRows="False"
  383. IsReadOnly="True"
  384. ItemsSource="{Binding TestResults}">
  385. <DataGrid.Columns>
  386. <DataGridTextColumn Header="序号"
  387. Binding="{Binding Index}"
  388. MinWidth="50" />
  389. <DataGridTextColumn Header="状态"
  390. Binding="{Binding IsPickSuccess}"
  391. MinWidth="60" />
  392. <DataGridTextColumn Header="位置X"
  393. Binding="{Binding X_Position, StringFormat={}{0:F3}}"
  394. MinWidth="70" />
  395. <DataGridTextColumn Header="位置Y"
  396. Binding="{Binding Y_Position, StringFormat={}{0:F3}}"
  397. MinWidth="70" />
  398. <DataGridTextColumn Header="位置Z"
  399. Binding="{Binding Z_Position, StringFormat={}{0:F3}}"
  400. MinWidth="70" />
  401. <DataGridTextColumn Header="循环时间"
  402. Binding="{Binding CycleTime, StringFormat={}{0:F2}s}"
  403. MinWidth="80" />
  404. <DataGridTextColumn Header="时间戳"
  405. Binding="{Binding Timestamp}"
  406. MinWidth="120" />
  407. </DataGrid.Columns>
  408. </DataGrid>
  409. </Grid>
  410. </Border>
  411. <!-- 导出和精度分析 -->
  412. <Border Grid.Row="5"
  413. Background="#ECF0F1"
  414. Padding="10">
  415. <StackPanel>
  416. <!-- 导出按钮 -->
  417. <WrapPanel HorizontalAlignment="Right">
  418. <Button Content="导出CSV"
  419. Background="#3498DB"
  420. Foreground="White"
  421. MinWidth="100"
  422. Command="{Binding ExportCSVCommand}" />
  423. <Button Content="清空数据"
  424. Background="#95A5A6"
  425. Foreground="White"
  426. MinWidth="100"
  427. Command="{Binding ClearDataCommand}" />
  428. </WrapPanel>
  429. </StackPanel>
  430. </Border>
  431. </Grid>
  432. </Border>
  433. </ScrollViewer>
  434. </Grid>
  435. </UserControl>