PickScrewAccuracyAnalyzer.xaml 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484
  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. <CheckBox Content="启用螺丝供料机1"
  248. Foreground="Black"
  249. Style="{StaticResource MaterialDesignCheckBox}"
  250. VerticalAlignment="Center"
  251. IsChecked="{Binding IsScrewProvide1}"
  252. Margin="10,0"
  253. FontSize="15" />
  254. <CheckBox Content="启用螺丝供料机2"
  255. Foreground="Black"
  256. Style="{StaticResource MaterialDesignCheckBox}"
  257. VerticalAlignment="Center"
  258. IsChecked="{Binding IsScrewProvide2}"
  259. Margin="10,0"
  260. FontSize="15" />
  261. <!--<Button Content="单次测试"
  262. Background="#3498DB"
  263. Foreground="White"
  264. MinWidth="100"
  265. Height="35"
  266. FontWeight="Bold"
  267. Command="{Binding SingleTestCommand}"
  268. IsEnabled="{Binding IsRunning, Converter={StaticResource InvertBooleanConverter}}" />-->
  269. <Button Content="连续测试"
  270. Background="#27AE60"
  271. Foreground="White"
  272. MinWidth="100"
  273. Height="35"
  274. FontWeight="Bold"
  275. Command="{Binding StartTestCommand}" />
  276. <Button Content="停止"
  277. Background="#E74C3C"
  278. Foreground="White"
  279. MinWidth="100"
  280. Height="35"
  281. Command="{Binding StopTestCommand}" />
  282. <Button Content="暂停"
  283. Background="#F39C12"
  284. Foreground="White"
  285. MinWidth="100"
  286. Height="35"
  287. Command="{Binding PauseTestCommand}" />
  288. </WrapPanel>
  289. </StackPanel>
  290. </Border>
  291. <!-- 进度显示 -->
  292. <Border Grid.Row="3"
  293. Background="White"
  294. Padding="10">
  295. <StackPanel>
  296. <TextBlock Style="{StaticResource TitleStyle}"
  297. Text="测试进度" />
  298. <Grid Margin="0 10 0 0">
  299. <Grid.RowDefinitions>
  300. <RowDefinition Height="Auto" />
  301. <RowDefinition Height="Auto" />
  302. </Grid.RowDefinitions>
  303. <ProgressBar Grid.Row="0"
  304. Height="25"
  305. Margin="5"
  306. Minimum="0"
  307. Maximum="{Binding RepeatCount}"
  308. Value="{Binding CurrentProgress}"
  309. IsEnabled="False"
  310. d:Maximum="100"
  311. d:Value="50" />
  312. <TextBlock Grid.Row="1"
  313. HorizontalAlignment="Center"
  314. FontSize="12"
  315. Foreground="#7F8C8D"
  316. d:Text="等待开始..."
  317. Text="{Binding Message}" />
  318. </Grid>
  319. <!-- 实时统计信息 -->
  320. <WrapPanel Margin="0 15 0 0"
  321. HorizontalAlignment="Center">
  322. <Border Background="#3498DB"
  323. Padding="10 5"
  324. Margin="5"
  325. CornerRadius="3">
  326. <StackPanel>
  327. <TextBlock Text="当前循环"
  328. Foreground="White"
  329. FontSize="11" />
  330. <TextBlock Text="{Binding CurrentProgress}"
  331. d:Text="1"
  332. Foreground="White"
  333. FontSize="16"
  334. FontWeight="Bold"
  335. HorizontalAlignment="Center" />
  336. </StackPanel>
  337. </Border>
  338. <Border Background="#2ECC71"
  339. Padding="10 5"
  340. Margin="5"
  341. CornerRadius="3">
  342. <StackPanel>
  343. <TextBlock Text="成功率"
  344. Foreground="White"
  345. FontSize="11" />
  346. <TextBlock Text="{Binding SuccessRate, StringFormat={}{0:F1}%}"
  347. d:Text="100%"
  348. Foreground="White"
  349. FontSize="16"
  350. FontWeight="Bold"
  351. HorizontalAlignment="Center" />
  352. </StackPanel>
  353. </Border>
  354. <Border Background="#9B59B6"
  355. Padding="10 5"
  356. Margin="5"
  357. CornerRadius="3">
  358. <StackPanel>
  359. <TextBlock Text="往返时间"
  360. Foreground="White"
  361. FontSize="11" />
  362. <TextBlock Text="{Binding CycleTime, StringFormat={}{0:F2}s}"
  363. d:Text="2.34s"
  364. Foreground="White"
  365. FontSize="16"
  366. FontWeight="Bold"
  367. HorizontalAlignment="Center" />
  368. </StackPanel>
  369. </Border>
  370. </WrapPanel>
  371. </StackPanel>
  372. </Border>
  373. <!-- 测试结果列表 -->
  374. <Border Grid.Row="4"
  375. Background="White"
  376. Padding="10">
  377. <Grid>
  378. <Grid.RowDefinitions>
  379. <RowDefinition Height="Auto" />
  380. <RowDefinition Height="*" />
  381. </Grid.RowDefinitions>
  382. <StackPanel Grid.Row="0"
  383. Orientation="Horizontal">
  384. <TextBlock Style="{StaticResource TitleStyle}"
  385. Text="测试结果列表" />
  386. <TextBlock Margin="10,0,0,0"
  387. VerticalAlignment="Center"
  388. Foreground="#7F8C8D"
  389. Text="(显示最近20次结果)" />
  390. </StackPanel>
  391. <DataGrid x:Name="dgResults"
  392. Grid.Row="1"
  393. Style="{StaticResource DataGridStyle}"
  394. MaxHeight="250"
  395. AutoGenerateColumns="False"
  396. CanUserAddRows="False"
  397. IsReadOnly="True"
  398. ItemsSource="{Binding TestResults}">
  399. <DataGrid.Columns>
  400. <DataGridTextColumn Header="序号"
  401. Binding="{Binding Index}"
  402. MinWidth="50" />
  403. <DataGridTextColumn Header="状态"
  404. Binding="{Binding IsPickSuccess}"
  405. MinWidth="60" />
  406. <DataGridTextColumn Header="位置X"
  407. Binding="{Binding X_Position, StringFormat={}{0:F3}}"
  408. MinWidth="70" />
  409. <DataGridTextColumn Header="位置Y"
  410. Binding="{Binding Y_Position, StringFormat={}{0:F3}}"
  411. MinWidth="70" />
  412. <DataGridTextColumn Header="位置Z"
  413. Binding="{Binding Z_Position, StringFormat={}{0:F3}}"
  414. MinWidth="70" />
  415. <DataGridTextColumn Header="循环时间"
  416. Binding="{Binding CycleTime, StringFormat={}{0:F2}s}"
  417. MinWidth="80" />
  418. <DataGridTextColumn Header="时间戳"
  419. Binding="{Binding Timestamp}"
  420. MinWidth="120" />
  421. </DataGrid.Columns>
  422. </DataGrid>
  423. </Grid>
  424. </Border>
  425. <!-- 导出和精度分析 -->
  426. <Border Grid.Row="5"
  427. Background="#ECF0F1"
  428. Padding="10">
  429. <StackPanel>
  430. <!-- 导出按钮 -->
  431. <WrapPanel HorizontalAlignment="Right">
  432. <Button Content="导出CSV"
  433. Background="#3498DB"
  434. Foreground="White"
  435. MinWidth="100"
  436. Command="{Binding ExportCSVCommand}" />
  437. <Button Content="清空数据"
  438. Background="#95A5A6"
  439. Foreground="White"
  440. MinWidth="100"
  441. Command="{Binding ClearDataCommand}" />
  442. </WrapPanel>
  443. </StackPanel>
  444. </Border>
  445. </Grid>
  446. </Border>
  447. </ScrollViewer>
  448. </Grid>
  449. </UserControl>