更新
This commit is contained in:
@@ -0,0 +1 @@
|
||||
False
|
||||
@@ -0,0 +1 @@
|
||||
96baa291-b974-4c70-bdb5-88021f4b92c2
|
||||
@@ -0,0 +1 @@
|
||||
894f8c9f-45d5-4e84-9830-ade97de53808
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUy27dNhCGX0XgWpR5Ey/apXaKukZgIzbaojtehjYRHeqAok4aGOfdC8onSNxdd8SAM/PPx5/zirI9AJrQh+Px4wlyXVGPatpDjDCJCceUPlEyUTpxNjCuBR3l36hH6Q6+oQkp4T31BjAHCVgEMmLHo8chgKGEBsJG0Wra5xVNr8imIcApeRiW9Q8oa1oymtCfKYfla+tt0+DnZQtDWWa4zWu12TcxNx8f757uH/C1oOT6/pe3myusrcCQApqQZRIijREL70YsjDbYCD1i8MwpIaS3yr2lpVyhZDsPa/jyQ0NYaobqpzbkQDAz6NyjYKttsp1d4enbsSnZMd20eL+H9+P0ik5Q0MT670Dfyl35OV3V5TjDCeajLSuUK78cDjYH1KNjWY5QaoIdzT7tPNualtxdml3PCXJFPbp/7B5mW+NSDu94Pb4huP0fBE5QHJoQJyOXSoHgnFsjHSMQlPRSMuctUdExoB7IaIQyVBHKDSOGj1JpFSwxHvXoeV6cnX9fd36GEacDUUwyEGCYkNJ4AlxDHBWQYKV0UnsTuFZM6KC5NdZS40B5I30zySfrX1KG7vYGTUgbEbU3EYsxjFiAFthoTrANYFSAkWuiUY+ul1xT3pZt7W5zheey80MT+tXOK7yR+1D8S6rg61Ya1L9ka/ZQlrD52v1wACUDGSjhLWmrx612nyGkAr5Cw/tUtku9/6QwyQhpUrZSINfuwdaX7je7vqAJQRBUBW+s1IZG5ZWMo4yaaA6OCBmjkHRUVI7a2dG5KH0IwZnIgjfGEIN6BM1w3e5xp0TkFDhWTHssgpDYKkqw8X7UiijvRHzHsbufW56RzlpmKHZGCSy8ItgFN2KtCaNROMM8+wnJxXyi8b2DkmH+aeRPyZdlXWLtLi7s3kH4vOW2P7rdkV9Txv/stG8W/wVK117Lpty+yuWBzj06gF23Aod9/Uyv6KH9k+5p30KcDpJq0aPHakvdjt/D40C11ufz+fwvAAAA//8DAIVrT6vDBAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUy27cOBBFf0XgWpT5fmiXsTMYwwhsxEYmmB0fxZiIWmpQVGcCo/99QLUDJ7PLjiiwirdOXdYLmt0B0IjeHY/vTzDXFfWo5j3ECFOYcEzpEyUjpSNnAyfSCk3/QT3Kd/AdjUiLEGiwgDkowCISiT1PAccIlhIaCZOi1XRfVjS+IJeHCKccYFjWT1DWvMxoRH/nOS7f2tsuD2FatjiUZYLbea1uDk3MzfvHu6f7B3wtKLm+/+Nyc4W1FRhyRCNyTEGiKWERvMTCGoutMBJDYF4LoYLT/pKW5wpldtOwxq9vGuJSZ6hhZAPjA8HMonOPoquuyfZuhafvx6Zkx3TT4v0e3o/jCzpBQSPrfwC9lLsKU75aNz/BCaajKyuUq7AcDm6OqEfHshyh1Aw7mhMUv6y5NqohaGcMpdE4LaSOhkvGdeQEoiFaRhutU0IlFqRM0RurRRKRUREVCOE16tEOb5pczcvcvWq/njLMFfXo/rF7mFxNSzn8gv/xQvT2N4A22WhEnEiutAbBOXdWeUYgahWUYj44opNnQAPs9rFUE8otI5ZLpY2OjtiAevTBhec8Q3d7g0ZkrEgm2ISFjBILMAJbwwl2EayOILkhBvXoeplrnrdlW7vbucKXsveLRvSnm1a4dPquhOdcIdStNAifVTPkQ1niFmr3ZgBKBjJQwlvSVo9b7T5CzAVChYbjqWyv9f6XwhQjpEnZSoG5dg+uPnd/ufUZjQiioDoG65SxNOmgVZIqGWI4eCJUSkJRqamSxjvpfVIhxuhtYjFYa4lFPYLmt263eAJvTRAcC+4kFtxT7KVV2ABII5VigbXW3jh291PLs8o7xyzF3mqBRdAE++glNoYwmoS3LLCfkLyaRTS+d1BmmH5q+UMOZVmXVLtX13S/QPi4zW19dLuDvuUZ/7vTvlnCVyhdm5bLc/sprwM69+gAbt0KHPbtM76gh/ZNuqd9CXE6KGpEjx6rK3U7/gjLgRpjzufz+T8AAAD//wMAXcXEucIEAAA=
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUy07kOBT9lcjbidO242d2NEVrEKJBTWlmNDs/bsBDyik5DgxC9e+tpKAbaM1iNlF0dR/nnnOun1GyO0AdOtnvzx4glQnVqMQ1xAiTmLSY0i0lHWUdUQ0hikul/0Y1ihfwhDqkuPfUG8AtSMA8EIFd23scAhhKaCBM8KWnvZ1Q94xsbAI8RA/NOP0BeYpjQh36M6YwPi6zbWz8MM6hyeMA52kqNvkFzObs5mJ7dY1POSWnV5+PmRNMS4MmBtQhyyT0tO8x905gbrTBhmuBwTOnOJfeKncsi6lATnZopnD/E0MYS4LiO9awtiGYGXSoUbDFLrCdnWD7tF+QrDRtlni9htff7hk9QEYdq18JPbb75If4aTe5OQ7h0/pFNdrncQ+5RFgZWZccBlvimKqXGadDhFRQjT4vJTez9zBNqENf7DDBa/gs3cYEX7LdweOY778e5zZfz7aoRtd5/Ad8ubblbhFJ66ANGAqegSZcEtEzJakhCmSvjbKGUsaMJMRRxoQMTikIVFunmASBanR1U10PtvRj3r0T7Oaowfn/kODm5PQsWTdA+LjS1uZbKKhDQgoHba+ZdNIGa1rdUwutCd61UoB2KmhQqmWt9cITTT1VVFijhFCyZRTV6NL6u5igOt+gDmnDe+1Nj7kIAnPQHBvdEmwDGBVAtJpoVKPTMZWY5nGeqvNU4DavqrxBeXVTnWR/Fwv4MueF77/kYu/rPIbZl+qnnShpSENJuxTNZT+X6huEmMGXde1tnl/6fShhkhGyQJlzhlSqRcHqdzstMkLgVAVvrNSG9sor2QvZa6JbcITLvueSCkWl0M4K53rpQwjO9Cx4YwwxqEawuLc6HozUWnPVY218wJxJgp2XPZbSCUGE0K0U73isroalzkhnLTMUO6M45l4R7IITWGvCaM+dYZ699+ibFfXCCm2UXJl5pe3F9nzR4AJyguENLZfR53Ea+1K9uK56R9SbOZs47Qf79Mu43zzjrfAt/Mg/vQN//6sJv81pefyq1c2PMeF/V3U3o7+HXC3usDEtd/6j4nIeStzeZbABwuUY4GPTQ412YKc5w259XteLT5BXGJv56LDzdBmHIU7gxxQm1LVcKtNwLvUL3v9OVKptpGjZ4XA4fAcAAP//AwDt9x8mzgUAAA==
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTQW/cIBCF/4o1Z+MAxjb41m5aNYqqRE3UVr1hGLqoDqwwTltF+98rvFsl6a03NGKG9743PEHQDwgjvDkc3j1iyAvUkP1W4pT3hLaEsXtGR8ZHOjSUDlJ1wzeowV/jbxhhEMYwo5C02CMRlnZkap0h1qJilFnKO1Fm6u8LjE+gfWPx0Rts4vIZ0+JjgBG++GDjz/K29o2Z42qbFGe8CkvWwRQxl+/uru9vbslOMLq7eXu6ueBSBjTewgia9+iYc0SYqSNCSUWUkB1Bw6dBiN7oYTq1+ZAxBT03i/3xrMHGHDCbkTe8bSjhCo41WJ11kT3pBe9/H4qSDdNlqddbeTuOT/CICUZe/wV6GndhZn9h4sODDvbC+eCXPdRwSPGAKXvckGwu51lnH0N1fmQ3ewwZari5q25nnV1MD6843Z2sX/2H84/a7H3A6uoSRpBKOGmUI6KzHREoBVGypURbVIPFrpVUQg27GLIPa1yX6ipk/J42lTDCez0veNL3Jpm9z2jymor0r33JG3/5vIu2FBjUcJuiXU2unnEz2tCG0bbMWPNhzdUntD6hyVg83af1PP6fFt5zSouyNSUMubrVeV990MseRkAr2GCN0r1UzA1m6F3XO0llixMVvXOiZ93A+k5Oupsm1xtr7aQct0YpRVXRXdKttoXqxKQ7y1piBR+IaFtNtLGGcKkH12ojlSs78Iy1uplLn+onrbliZFKDIMIMlEx26oiUlDMnJsUNf4HknLgouK8xBZxfWP7oTYpLdLk6R1+9gvBpDeWzVtsa/PSB/NrgX0bzA1NVwtM+lL0853U8Ho9/AAAA//8DAPBoK+/zAwAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSTT0/cMBDFv0o053WwHSexc6MLVRGqQGXVVr35zxgsgrNyHApC+90rZ7ei7a2XKBplZt77vckbRP2EMMD5fn/5jDHPsIEc1hKnvCO0IYztGB0YH2hfUyqUEPIHbCBc4ysM0AtrmVVIGuyQCEdbYhpviXOoGGWO8laUmfp+huENdKgdPgeL9TR/xTSHKcIA30J008+yW4fajtPi6jSNeBXnrKMtYi4u7653N7dkKxjd3nw4fjnjXAbUwcEAmnfomfdEWNMSoaQiSsiWoOWmF6KzujfHthAzpqjHenaP7xrclCNmO/CaNzUlXMFhA05nXWQbPePudV+UrJguSn2zltfX4Q2eMcHAN7+BHsed2TGcPc1mCaM7Oz6znh+L032a9phywJXLanUcdQ5TrE6btmPAmGEDN3fV7aizn9LTX7Dujv6v/sP+rmy/fEG7ZHTbaYkZBhAloc/aPoSI1dUFDCCV8NIqT0TrWiJQCqJkQ4l2qHqHbSOphA1sp5hDXKZlrq5ixvu06ocBPupxxqPy82QfQkabl1RMfe/Ksts0ucXm6h0/ozWtGW1K05L3S66+oAsJbcZib5eW07x/WnjHKS1SlpQw5upW54fqk54fYAB0gvXOKt1JxXxv+863nZdUNmio6LwXHWt71rXS6NYY31nnnFGeO6uUogo2gCXtaj0wRi1tlLNE6oYR0bKWGImWeIPoJGtM1xT17xyrm7H0qc5ozRUjRvWCCNtTYpxpiZSUMy+M4pb/geQUvih8rzFFHP+w/DnYNM2Tz9XpCqq/IHxZYvl5q/UifoZIXlbaF5N9xFSVtHSI5U5PAR0Oh8MvAAAA//8DADPqJ3gDBAAA
|
||||
@@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW8cKRCG/0qLc9MGmqabvjljR2tZka14lF3lxkcRI7dhBLQTy5r/vqJnIsen1V4QKqjirect8YaCegY0o8vD4foFQsmoRcVvIUaYwKTHlO4pmSmbydgR0lPK+++oRf4WXtGMRm4MNRJwDwIwt2TAuncGWwuSEmoJG3itqX5kNL8h5TsLL95AF/M3SNnHgGb0tw82/qxvK9+ZJa62S3GBm5CLCqaKubp+uN3f3eMdp2R39+l0M0OuBTpv0YwUE+Coc5gbPWAuJ4klnwYMhumRc2HUqE9pPhRIQS1dtk/vGmwsAYqZWcf6jmAm0bFFVhVVZWuVYf96qEo2TFc13m7hbTu/oRdIaGbtb6Cnchdm8RfPWa9+sRentaj8lLfVKVNiekUtOqR4gFQ8bIwuc4ZnvbzuVX76fLpTt/n6F5i1gN3FNRQ0o35CLdoYLYsqPobmLHG3eAhlOyzJh+zNf5USqEV3D839ooqL6fmDJQ8nyjf/A/IXZR59gObmCs1oktxNRjrMBztgDhPHcuoJVhbkaGHoJ1Ib2cVQfFjjmpubUOBH2lpCM/qslgwnfZfJPPoCpqyp9vmPqKN1n6JdTWneraSkIx0lfU1ay2EtzVewPoEpUJvYp/Vc79vHFCYYIVXKmhKE0tyr8tj8pfIjmhFYTkdrpBKTpG40o3CDcBOZetCEC+e4oMNIxTBpNWjthLHWaumYNVJKIlGLoE5Osw1rTy11Qhg8ibHHXGqBtRt7bB3lVDAYqaoZ7xybu6XmSaGVYpJiLUeOuRkJ1lYPeJoIo45ryQz7A8l5HnjlewspwPJHy1+8STFHV5qz180HCF/XUD+CZvP9pw/410b7KponSE11S/lQZ/5s0PF4PP4LAAD//wMAQozcs08EAAA=
|
||||
@@ -388,7 +388,8 @@ namespace COFTester.Services
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 拉力校準,向 M1300 寫入命令 2
|
||||
/// 拉力校準,向 M1300 寫入脈衝信號(復歸型按鈕)
|
||||
/// 實現方式:寫入 true -> 延遲 100ms -> 寫入 false -> 延遲 100ms
|
||||
/// </summary>
|
||||
public virtual async void ForceCalibration()
|
||||
{
|
||||
@@ -396,8 +397,19 @@ namespace COFTester.Services
|
||||
{
|
||||
if (_modbusMaster != null && _isConnected)
|
||||
{
|
||||
System.Diagnostics.Debug.WriteLine("[Modbus] 發送拉力校準命令 (2) 到 M1300");
|
||||
await WriteCalibrationRegisterAsync((ushort)ModbusCalibrationCommand.ForceCalibration);
|
||||
System.Diagnostics.Debug.WriteLine("[Modbus] 發送拉力校準脈衝命令到 M1300");
|
||||
|
||||
await _modbusMaster.WriteSingleCoilAsync(1, 1300, true);
|
||||
System.Diagnostics.Debug.WriteLine("[Modbus] M1300 = true");
|
||||
|
||||
await Task.Delay(100);
|
||||
|
||||
await _modbusMaster.WriteSingleCoilAsync(1, 1300, false);
|
||||
System.Diagnostics.Debug.WriteLine("[Modbus] M1300 = false");
|
||||
|
||||
await Task.Delay(100);
|
||||
|
||||
System.Diagnostics.Debug.WriteLine("[Modbus] 拉力校準脈衝命令發送完成");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@@ -1092,7 +1092,7 @@ namespace COFTester.ViewModels
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 拉力校准 - 向 M1300 写入命令 2
|
||||
/// 拉力校准 - 触发 M1300 复归型脉冲
|
||||
/// </summary>
|
||||
private void ForceCalibration()
|
||||
{
|
||||
|
||||
@@ -68,11 +68,11 @@
|
||||
<!-- 标定操作 -->
|
||||
<Border Background="#F8F9FA" CornerRadius="4" Padding="15">
|
||||
<StackPanel>
|
||||
<TextBlock Text="{Binding Lang.CalibrationOperation}" FontWeight="Bold" Margin="0,0,0,10" FontSize="14"/>
|
||||
<TextBlock Text="{Binding Lang.ForceCalibration}" FontWeight="Bold" Margin="0,0,0,10" FontSize="14"/>
|
||||
<TextBlock Text="{Binding Lang.CalibrationInstruction}" TextWrapping="Wrap" Margin="0,0,0,15" FontSize="12"/>
|
||||
|
||||
<!-- 零点标定(拉力校准) -->
|
||||
<Button Content="{Binding Lang.ZeroCalibration}" Command="{Binding ZeroCalibrationCommand}" Height="50" Foreground="White" FontSize="14" Margin="0,0,0,10">
|
||||
<Button Content="{Binding Lang.ForceCalibration}" Command="{Binding ForceCalibrationCommand}" Height="50" Foreground="White" FontSize="14" Margin="0,0,0,10">
|
||||
<Button.Style>
|
||||
<Style TargetType="Button">
|
||||
<Setter Property="Background" Value="{StaticResource AccentBrush}"/>
|
||||
@@ -95,7 +95,7 @@
|
||||
</Button.Style>
|
||||
</Button>
|
||||
|
||||
<TextBlock Text="{Binding Lang.ZeroCalibrationNote}"
|
||||
<TextBlock Text="{Binding Lang.ForceCalibrationNote}"
|
||||
TextWrapping="Wrap" FontSize="11" Foreground="{StaticResource GrayBrush}" Margin="0,0,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
315
CSI-H238M/标准选择功能说明.md
Normal file
315
CSI-H238M/标准选择功能说明.md
Normal file
@@ -0,0 +1,315 @@
|
||||
# 标准选择功能实现说明
|
||||
|
||||
## 功能概述
|
||||
在设置页面实现了测试标准选择、滑块质量选择和自定义参数配置功能,支持三个国际标准的快速切换、自定义参数模式,以及水平和升降测试参数的完整配置。**重要更新**:修复了报告生成时参数显示不正确的问题,确保报告中显示的是选中标准的实际参数值。
|
||||
|
||||
## 实现内容
|
||||
|
||||
### 1. UI界面(SettingsPage.xaml)
|
||||
|
||||
#### 1.1 滑块质量选择
|
||||
- 新增"滑块质量"下拉框(ComboBox)
|
||||
- 三个质量选项:200g、300g、500g
|
||||
- 默认选中:200g
|
||||
- 双向绑定到 `Parameters.SledMass` 属性
|
||||
- 质量变化会影响法向力计算,从而影响摩擦系数结果
|
||||
|
||||
#### 1.2 测试标准选择
|
||||
- 四个可切换高亮的Button:
|
||||
- GB/T 10006-2021
|
||||
- ISO 8295:1995
|
||||
- ASTM D1894-24
|
||||
- 自定义
|
||||
- 默认不选中任何标准
|
||||
- 选中后按钮高亮显示(蓝色背景,白色文字)
|
||||
- 鼠标悬停时显示浅蓝色背景
|
||||
- 使用 UniformGrid 均匀分布四个按钮(1行4列)
|
||||
|
||||
#### 1.3 水平测试参数(一行显示)
|
||||
- 使用 Grid 两列布局
|
||||
- 左列:水平测试速度(mm/min)
|
||||
- 右列:水平测试位移(mm)
|
||||
- 中间间隔:10px
|
||||
- 根据模式切换只读/可编辑状态
|
||||
|
||||
#### 1.4 升降测试参数(一行显示)
|
||||
- 使用 Grid 两列布局
|
||||
- 左列:升降测试速度(mm/min)
|
||||
- 右列:升降测试位移(mm)
|
||||
- 中间间隔:10px
|
||||
- 根据模式切换只读/可编辑状态
|
||||
|
||||
#### 1.5 更新按钮
|
||||
- 仅在自定义模式下显示
|
||||
- 绿色背景(#27AE60)
|
||||
- 点击后更新参数到设备
|
||||
- 带图标和文字:"更新参数到设备"
|
||||
|
||||
### 2. 参数配置
|
||||
|
||||
#### 2.1 滑块质量规格
|
||||
| 质量选项 | 数值 | 说明 |
|
||||
|---------|------|------|
|
||||
| 200 g | 200.0 | 默认值,轻质量测试 |
|
||||
| 300 g | 300.0 | 中等质量测试 |
|
||||
| 500 g | 500.0 | 重质量测试 |
|
||||
|
||||
#### 2.2 标准参数配置
|
||||
| 标准 | 滑块质量 | 水平测试速度 | 水平测试位移 | 升降测试速度 | 升降测试位移 |
|
||||
|------|---------|-------------|-------------|-------------|-------------|
|
||||
| GB/T 10006-2021 | **用户选择** | 100 mm/min | 80 mm | 保持PLC原值 | 保持PLC原值 |
|
||||
| ISO 8295:1995 | **用户选择** | 100 mm/min | 80 mm | 保持PLC原值 | 保持PLC原值 |
|
||||
| ASTM D1894-24 | **用户选择** | 150 mm/min | 150 mm | 保持PLC原值 | 保持PLC原值 |
|
||||
| 自定义 | 用户选择 | 用户输入 | 用户输入 | 用户输入 | 用户输入 |
|
||||
|
||||
**重要说明**:选择预设标准时,滑块质量保持用户在UI上选择的值(200g/300g/500g),不会被覆盖。
|
||||
|
||||
### 3. 核心逻辑
|
||||
|
||||
#### 3.1 质量选择逻辑(TestParameters.cs)
|
||||
- `SledMass` 属性默认值设置为 200.0g
|
||||
- 通过 ComboBox 的 TwoWay 绑定实现实时更新
|
||||
- 质量变化会影响摩擦系数计算:
|
||||
```csharp
|
||||
// 法向力计算公式:W = m * g
|
||||
double gravityForce = (parameters.SledMass / 1000.0) * 9.80665;
|
||||
// 摩擦系数 = 摩擦力 / 法向力
|
||||
double COF = frictionForce / gravityForce;
|
||||
```
|
||||
|
||||
#### 3.2 标准选择逻辑(MainViewModel.cs)
|
||||
- 新增 `SelectedStandard` 属性跟踪当前选中的标准
|
||||
- 新增 `IsStandardParametersReadOnly` 属性控制输入框状态
|
||||
- 新增 `SelectStandardCommand` 命令(泛型 RelayCommand<string>)
|
||||
- 新增 `UpdateCustomParametersCommand` 命令
|
||||
- 实现 `SelectStandard(string standardCode)` 方法
|
||||
- 实现 `UpdateCustomParametersAsync()` 方法
|
||||
|
||||
**未选标准时**(初始状态):
|
||||
- `SelectedStandard` 为空字符串
|
||||
- `IsStandardParametersReadOnly` 返回 true
|
||||
- 所有输入框只读(灰色背景)
|
||||
- 显示从PLC读取的值
|
||||
- **报告参数**:
|
||||
- `Parameters.Standard` = "PLC默认配置"
|
||||
- `Parameters.SledMass` = 200.0 g(默认值)
|
||||
- `Parameters.TestSpeed` = PLC读取的水平测试速度
|
||||
- `Parameters.TestStroke` = PLC读取的水平测试位移
|
||||
|
||||
**预设标准模式**(GB/T 10006-2021、ISO 8295:1995、ASTM D1894-24):
|
||||
1. 写入寄存器 D370(水平测试速度)
|
||||
2. 写入寄存器 D380(水平测试位移)
|
||||
3. **更新报告参数**:
|
||||
- `Parameters.Standard` = 标准全名(如 "GB/T 10006-2021")
|
||||
- `Parameters.SledMass` = **保持用户选择的值**(200g/300g/500g)
|
||||
- `Parameters.TestSpeed` = 标准规定的速度值
|
||||
- `Parameters.TestStroke` = 标准规定的位移值
|
||||
4. 更新本地水平测试参数(用于UI显示)
|
||||
5. 升降参数保持PLC原值不变
|
||||
6. 更新 SelectedStandard 属性(触发按钮高亮)
|
||||
7. 所有输入框保持只读(灰色背景)
|
||||
|
||||
**重要**:选择标准时不会覆盖用户选择的滑块质量,确保法向力计算使用正确的质量值。
|
||||
|
||||
**自定义模式**:
|
||||
1. 更新 SelectedStandard 为 "Custom"
|
||||
2. `IsStandardParametersReadOnly` 返回 false
|
||||
3. 所有输入框变为可编辑(白色背景)
|
||||
4. 显示"更新参数到设备"按钮
|
||||
5. 用户修改参数后点击按钮
|
||||
6. 调用 WriteHorizontalTestParametersAsync 和 WriteVerticalTestParametersAsync
|
||||
7. 显示成功/失败消息
|
||||
|
||||
### 4. 报告生成参数修复(重要更新)
|
||||
|
||||
#### 4.1 问题描述
|
||||
之前的实现中,选择标准后只更新了 `Parameters.HorizontalTestSpeed` 和 `Parameters.HorizontalTestDisplacement`,但没有更新用于报告生成的 `Parameters.Standard`、`Parameters.SledMass`、`Parameters.TestSpeed` 和 `Parameters.TestStroke`,导致生成的PDF报告中显示的参数不正确。
|
||||
|
||||
#### 4.2 修复方案
|
||||
在 `SelectStandard` 方法中,除了更新水平测试参数外,还同步更新以下报告参数:
|
||||
|
||||
```csharp
|
||||
// 更新所有相关参数(用于报告生成)
|
||||
// 注意:不更新 SledMass,保留用户在UI上选择的质量值
|
||||
Parameters.Standard = standardName; // 更新标准名称
|
||||
// Parameters.SledMass 保持用户选择的值(200g/300g/500g)
|
||||
Parameters.TestSpeed = speed; // 更新测试速度(用于报告)
|
||||
Parameters.TestStroke = displacement; // 更新测试行程(用于报告)
|
||||
Parameters.HorizontalTestSpeed = speed; // 更新水平测试速度
|
||||
Parameters.HorizontalTestDisplacement = displacement; // 更新水平测试位移
|
||||
```
|
||||
|
||||
**关键修复**:不覆盖 `Parameters.SledMass`,保留用户在UI上选择的质量值,确保:
|
||||
1. 法向力计算使用正确的质量值:`W = (SledMass / 1000) × 9.80665`
|
||||
2. 报告显示用户实际选择的质量值
|
||||
3. 摩擦系数计算准确:`μ = F / W`
|
||||
|
||||
#### 4.3 报告显示效果
|
||||
修复后,PDF报告中的测试参数部分会正确显示用户选择的质量值:
|
||||
|
||||
**选择 GB/T 10006-2021 标准 + 200g 质量时**:
|
||||
```
|
||||
测试标准: GB/T 10006-2021
|
||||
滑块质量: 200.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
|
||||
**选择 ISO 8295:1995 标准 + 300g 质量时**:
|
||||
```
|
||||
测试标准: ISO 8295:1995
|
||||
滑块质量: 300.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
|
||||
**选择 ASTM D1894-24 标准 + 500g 质量时**:
|
||||
```
|
||||
测试标准: ASTM D1894-24
|
||||
滑块质量: 500.0 g
|
||||
测试速度: 150.0 mm/min
|
||||
测试行程: 150.0 mm
|
||||
```
|
||||
|
||||
**未选择标准时**(使用PLC默认值):
|
||||
```
|
||||
测试标准: PLC默认配置
|
||||
滑块质量: 200.0 g(或用户选择的值)
|
||||
测试速度: [PLC读取的值] mm/min
|
||||
测试行程: [PLC读取的值] mm
|
||||
```
|
||||
|
||||
**法向力计算验证**:
|
||||
- 200g: W = 0.2 × 9.80665 = 1.96133 N
|
||||
- 300g: W = 0.3 × 9.80665 = 2.94200 N
|
||||
- 500g: W = 0.5 × 9.80665 = 4.90333 N
|
||||
|
||||
### 5. Modbus服务扩展(ModbusService.cs)
|
||||
- 在 `ModbusServiceBase` 中新增抽象方法:
|
||||
```csharp
|
||||
public abstract Task WriteHorizontalTestParametersAsync(double speed, double displacement);
|
||||
public abstract Task WriteVerticalTestParametersAsync(double speed, double displacement);
|
||||
```
|
||||
- 在 `ModbusTcpService`、`ModbusRtuService` 和 `ModbusAsciiService` 中实现这两个方法
|
||||
- 使用 `ConvertFloatToRegisters` 转换浮点数为寄存器格式
|
||||
- 通过 `WriteMultipleRegistersAsync` 写入 PLC
|
||||
|
||||
### 6. 寄存器映射
|
||||
| 寄存器 | 参数 | 单位 |
|
||||
|--------|------|------|
|
||||
| D370 | 水平测试速度 | mm/min |
|
||||
| D380 | 水平测试位移 | mm |
|
||||
| D330 | 升降测试速度 | mm/min |
|
||||
| D340 | 升降测试位移 | mm |
|
||||
|
||||
### 7. UI样式特性
|
||||
- **ComboBox样式**:标准高度40px,浅灰色边框,垂直居中对齐
|
||||
- **Button未选中状态**:白色背景,深灰色文字,浅灰色边框
|
||||
- **Button选中状态**:蓝色背景(#3498DB),白色文字,蓝色边框
|
||||
- **Button悬停状态**:浅蓝色背景(#F0F8FF),蓝色边框
|
||||
- **TextBox只读状态**:灰色背景(#F5F5F5),不可编辑
|
||||
- **TextBox可编辑状态**:白色背景,可输入
|
||||
- **更新按钮**:绿色背景(#27AE60),悬停时深绿色(#229954)
|
||||
- **圆角设计**:6px圆角,现代化外观
|
||||
- **响应式布局**:按钮均匀分布,参数两列对齐
|
||||
|
||||
## 使用流程
|
||||
|
||||
### 预设标准模式
|
||||
1. 连接设备
|
||||
2. 进入设置页面
|
||||
3. **先选择滑块质量**(200g/300g/500g),默认200g
|
||||
4. 点击任一预设标准按钮(GB/T 10006-2021、ISO 8295:1995 或 ASTM D1894-24)
|
||||
5. 按钮立即高亮显示
|
||||
6. 系统写入水平测试参数到 PLC(D370、D380)
|
||||
7. **系统同步更新报告参数**(Standard、TestSpeed、TestStroke)
|
||||
8. **滑块质量保持用户选择的值,不被覆盖**
|
||||
9. 水平参数输入框显示标准值(只读,灰色背景)
|
||||
10. 升降参数保持PLC原值不变(只读,灰色背景)
|
||||
11. 生成报告时会显示正确的标准名称、用户选择的质量值和参数值
|
||||
|
||||
### 自定义模式
|
||||
1. 连接设备
|
||||
2. 进入设置页面
|
||||
3. 选择滑块质量
|
||||
4. 点击"自定义"按钮
|
||||
5. 按钮高亮显示
|
||||
6. 输入框变为可编辑状态(白色背景)
|
||||
7. 修改水平/升降测试参数
|
||||
8. 点击"更新参数到设备"按钮
|
||||
9. 系统写入参数到 PLC
|
||||
10. 显示成功/失败消息
|
||||
|
||||
## 技术要点
|
||||
- 使用 WPF ComboBox 的 TwoWay 绑定实现质量选择
|
||||
- 使用 SelectedValuePath="Tag" 绑定数值
|
||||
- 使用 WPF Button 的 Command 绑定实现标准选择
|
||||
- 使用 CommandParameter 传递标准代码
|
||||
- 使用 DataTrigger 绑定 SelectedStandard 属性实现按钮高亮
|
||||
- 使用 DataTrigger 控制更新按钮的显示/隐藏
|
||||
- 使用 IsReadOnly 属性和 Style Trigger 控制输入框状态
|
||||
- **关键修复**:选择标准时同步更新所有报告相关参数
|
||||
- 异步写入寄存器,避免阻塞 UI
|
||||
- 完整的错误处理和状态提示
|
||||
- 支持 ModbusTCP、ModbusRTU 和 ModbusASCII 三种通信模式
|
||||
|
||||
## 摩擦系数计算说明
|
||||
滑块质量直接影响法向力(重力),从而影响摩擦系数的计算结果:
|
||||
|
||||
```
|
||||
法向力 W = (滑块质量 / 1000) × 重力加速度
|
||||
其中:重力加速度 g = 9.80665 m/s²
|
||||
|
||||
静摩擦系数 μs = 最大静摩擦力 / 法向力
|
||||
动摩擦系数 μk = 平均动摩擦力 / 法向力
|
||||
```
|
||||
|
||||
示例:
|
||||
- 200g 滑块:W = 0.2 × 9.80665 = 1.96133 N
|
||||
- 300g 滑块:W = 0.3 × 9.80665 = 2.94200 N
|
||||
- 500g 滑块:W = 0.5 × 9.80665 = 4.90333 N
|
||||
|
||||
相同摩擦力下,质量越大,法向力越大,计算出的摩擦系数越小。
|
||||
|
||||
## 注意事项
|
||||
- 滑块质量默认为 200g,可随时更改
|
||||
- 质量变化会立即影响后续测试的摩擦系数计算
|
||||
- 必须先连接设备才能选择标准
|
||||
- **未选标准时**:所有输入框只读,显示PLC值,报告显示"PLC默认配置"和用户选择的质量
|
||||
- **预设标准模式**:
|
||||
- 只写入水平测试参数(D370、D380)到PLC
|
||||
- 同时更新报告参数(Standard、TestSpeed、TestStroke)
|
||||
- **不覆盖 SledMass,保留用户选择的质量值**
|
||||
- 升降参数保持PLC原值
|
||||
- 报告会显示选中标准的完整名称、用户选择的质量值和参数值
|
||||
- 法向力计算使用用户选择的质量:W = (SledMass / 1000) × 9.80665
|
||||
- **自定义模式**:所有参数可编辑,需手动点击"更新参数到设备"按钮
|
||||
- 参数写入失败会弹出错误提示
|
||||
- 写入成功后状态栏会显示确认消息
|
||||
- 按钮高亮状态会持续保持,直到选择其他标准
|
||||
- 输入框状态根据选择的模式自动切换
|
||||
- **重要**:生成PDF报告前请确保已选择正确的标准,报告会显示当前选中标准的参数
|
||||
|
||||
## 代码文件修改清单
|
||||
1. `CSI-H238M/Views/SettingsPage.xaml` - UI界面(ComboBox + Button + 参数布局)
|
||||
2. `CSI-H238M/Models/Model.cs` - TestParameters 默认值设置
|
||||
3. `CSI-H238M/ViewModels/ViewModel.cs` - 命令、逻辑和状态管理(**已修复报告参数更新**)
|
||||
4. `CSI-H238M/Services/ModbusService.cs` - Modbus服务扩展(水平和升降参数写入)
|
||||
5. `CSI-H238M/Services/PdfReportService.cs` - PDF报告生成(使用Parameters中的值)
|
||||
|
||||
## 编译状态
|
||||
✅ 编译成功,无错误
|
||||
⚠️ 2个警告(不影响功能)
|
||||
✅ UI样式完整,支持高亮切换
|
||||
✅ 质量选择功能正常,默认200g
|
||||
✅ 自定义模式功能正常,支持参数编辑和更新
|
||||
✅ 水平和升降参数一行显示,布局清晰
|
||||
✅ **报告参数显示修复完成,确保显示正确的标准和参数值**
|
||||
|
||||
## 版本历史
|
||||
- **v1.0** (初始版本) - 实现标准选择和参数配置功能
|
||||
- **v1.1** (2024-02-06) - 修复报告生成时参数显示不正确的问题,确保选择标准后报告显示正确的标准名称、滑块质量、测试速度和测试行程
|
||||
- **v1.2** (2024-02-06) - **关键修复**:选择标准时不再覆盖用户选择的滑块质量,确保:
|
||||
- 法向力计算使用正确的质量值(200g/300g/500g)
|
||||
- 报告显示用户实际选择的质量值
|
||||
- 摩擦系数计算准确:μ = F / W,其中 W = (SledMass / 1000) × 9.80665
|
||||
237
CSI-H238M/质量值验证测试.md
Normal file
237
CSI-H238M/质量值验证测试.md
Normal file
@@ -0,0 +1,237 @@
|
||||
# 滑块质量值获取验证测试
|
||||
|
||||
## 测试目的
|
||||
验证系统在不同场景下是否正确获取和使用用户选择的滑块质量值(200g/300g/500g),确保法向力计算和报告生成的准确性。
|
||||
|
||||
## 测试场景
|
||||
|
||||
### 场景1:默认质量值测试
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 不修改质量选择(默认200g)
|
||||
3. 选择标准 GB/T 10006-2021
|
||||
4. 执行测试
|
||||
5. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 200.0 g
|
||||
- 法向力计算:W = 0.2 × 9.80665 = 1.96133 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: GB/T 10006-2021
|
||||
滑块质量: 200.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 1.96133
|
||||
|
||||
### 场景2:选择300g质量测试
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 在设置页选择滑块质量:300g
|
||||
3. 选择标准 ISO 8295:1995
|
||||
4. 执行测试
|
||||
5. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 300.0 g
|
||||
- 法向力计算:W = 0.3 × 9.80665 = 2.94200 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: ISO 8295:1995
|
||||
滑块质量: 300.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 2.94200
|
||||
|
||||
### 场景3:选择500g质量测试
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 在设置页选择滑块质量:500g
|
||||
3. 选择标准 ASTM D1894-24
|
||||
4. 执行测试
|
||||
5. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 500.0 g
|
||||
- 法向力计算:W = 0.5 × 9.80665 = 4.90333 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: ASTM D1894-24
|
||||
滑块质量: 500.0 g
|
||||
测试速度: 150.0 mm/min
|
||||
测试行程: 150.0 mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 4.90333
|
||||
|
||||
### 场景4:切换质量后选择标准
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 选择滑块质量:200g
|
||||
3. 选择标准 GB/T 10006-2021
|
||||
4. 切换滑块质量为:500g
|
||||
5. 执行测试
|
||||
6. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 500.0 g(最新选择的值)
|
||||
- 法向力计算:W = 0.5 × 9.80665 = 4.90333 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: GB/T 10006-2021
|
||||
滑块质量: 500.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 4.90333
|
||||
|
||||
### 场景5:先选择标准后选择质量
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 选择标准 ISO 8295:1995
|
||||
3. 选择滑块质量:300g
|
||||
4. 执行测试
|
||||
5. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 300.0 g
|
||||
- 法向力计算:W = 0.3 × 9.80665 = 2.94200 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: ISO 8295:1995
|
||||
滑块质量: 300.0 g
|
||||
测试速度: 100.0 mm/min
|
||||
测试行程: 80.0 mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 2.94200
|
||||
|
||||
### 场景6:自定义模式质量测试
|
||||
**操作步骤**:
|
||||
1. 启动程序,连接设备
|
||||
2. 选择滑块质量:300g
|
||||
3. 点击"自定义"按钮
|
||||
4. 修改水平测试速度为:120 mm/min
|
||||
5. 点击"更新参数到设备"
|
||||
6. 执行测试
|
||||
7. 生成PDF报告
|
||||
|
||||
**预期结果**:
|
||||
- UI显示:滑块质量 = 300.0 g
|
||||
- 法向力计算:W = 0.3 × 9.80665 = 2.94200 N
|
||||
- 报告显示:
|
||||
```
|
||||
测试标准: 自定义
|
||||
滑块质量: 300.0 g
|
||||
测试速度: 120.0 mm/min
|
||||
测试行程: [用户设置的值] mm
|
||||
```
|
||||
- 摩擦系数计算:μ = F / 2.94200
|
||||
|
||||
## 验证点检查清单
|
||||
|
||||
### 代码层面验证
|
||||
- [x] `Parameters.SledMass` 默认值为 200.0g
|
||||
- [x] ComboBox 双向绑定到 `Parameters.SledMass`
|
||||
- [x] 选择标准时不覆盖 `Parameters.SledMass`
|
||||
- [x] 法向力计算使用 `parameters.SledMass`:
|
||||
```csharp
|
||||
double gravityForce = (parameters.SledMass / 1000.0) * 9.80665;
|
||||
```
|
||||
- [x] 报告生成使用 `parameters.SledMass`:
|
||||
```csharp
|
||||
$"滑块质量: {parameters.SledMass:F1} g"
|
||||
```
|
||||
|
||||
### UI层面验证
|
||||
- [ ] 质量下拉框显示三个选项:200g、300g、500g
|
||||
- [ ] 默认选中200g
|
||||
- [ ] 选择不同质量后,UI立即更新
|
||||
- [ ] 选择标准后,质量值不变
|
||||
- [ ] 切换质量后,新值立即生效
|
||||
|
||||
### 计算层面验证
|
||||
- [ ] 200g质量:法向力 = 1.96133 N
|
||||
- [ ] 300g质量:法向力 = 2.94200 N
|
||||
- [ ] 500g质量:法向力 = 4.90333 N
|
||||
- [ ] 摩擦系数 = 摩擦力 / 法向力
|
||||
- [ ] 不同质量下,相同摩擦力产生不同摩擦系数
|
||||
|
||||
### 报告层面验证
|
||||
- [ ] 报告显示用户选择的质量值
|
||||
- [ ] 报告显示选择的标准名称
|
||||
- [ ] 报告显示正确的测试速度和行程
|
||||
- [ ] 报告中的摩擦系数与计算值一致
|
||||
|
||||
## 关键代码位置
|
||||
|
||||
### 1. 质量属性定义(Model.cs)
|
||||
```csharp
|
||||
private double _sledMass = 200.0; // 默认值 200g
|
||||
|
||||
public double SledMass
|
||||
{
|
||||
get => _sledMass;
|
||||
set { _sledMass = value; OnPropertyChanged(); }
|
||||
}
|
||||
```
|
||||
|
||||
### 2. UI绑定(SettingsPage.xaml)
|
||||
```xml
|
||||
<ComboBox SelectedValue="{Binding Parameters.SledMass, Mode=TwoWay}"
|
||||
SelectedValuePath="Tag">
|
||||
<ComboBoxItem Content="200 g" Tag="200.0"/>
|
||||
<ComboBoxItem Content="300 g" Tag="300.0"/>
|
||||
<ComboBoxItem Content="500 g" Tag="500.0"/>
|
||||
</ComboBox>
|
||||
```
|
||||
|
||||
### 3. 标准选择不覆盖质量(ViewModel.cs)
|
||||
```csharp
|
||||
// 更新所有相关参数(用于报告生成)
|
||||
// 注意:不更新 SledMass,保留用户在UI上选择的质量值
|
||||
Parameters.Standard = standardName;
|
||||
// Parameters.SledMass 保持用户选择的值(200g/300g/500g)
|
||||
Parameters.TestSpeed = speed;
|
||||
Parameters.TestStroke = displacement;
|
||||
```
|
||||
|
||||
### 4. 法向力计算(Services.cs)
|
||||
```csharp
|
||||
// 計算法向力(重力):W = m * g
|
||||
// 質量單位從 g 轉換為 kg
|
||||
double gravityForce = (parameters.SledMass / 1000.0) * GravityConstant;
|
||||
```
|
||||
|
||||
### 5. 报告生成(PdfReportService.cs)
|
||||
```csharp
|
||||
$"滑块质量: {parameters.SledMass:F1} g"
|
||||
```
|
||||
|
||||
## 测试结论
|
||||
|
||||
### 修复前的问题
|
||||
- 选择标准时会强制将质量设置为200g
|
||||
- 用户选择的300g或500g质量会被覆盖
|
||||
- 导致法向力计算错误
|
||||
- 报告显示的质量值不正确
|
||||
|
||||
### 修复后的效果
|
||||
- ✅ 选择标准时保留用户选择的质量值
|
||||
- ✅ 法向力计算使用正确的质量值
|
||||
- ✅ 报告显示用户实际选择的质量值
|
||||
- ✅ 摩擦系数计算准确
|
||||
- ✅ 支持200g/300g/500g三种质量选择
|
||||
|
||||
## 注意事项
|
||||
1. **质量选择优先**:建议用户先选择质量,再选择标准
|
||||
2. **质量可随时更改**:用户可以在任何时候更改质量,新值立即生效
|
||||
3. **质量影响计算**:不同质量会产生不同的法向力,从而影响摩擦系数
|
||||
4. **报告准确性**:报告会显示测试时实际使用的质量值
|
||||
5. **标准独立性**:选择标准只影响速度和位移,不影响质量
|
||||
|
||||
## 相关文档
|
||||
- `标准选择功能说明.md` - 完整功能说明
|
||||
- `CSI-H238M/ViewModels/ViewModel.cs` - 标准选择逻辑
|
||||
- `CSI-H238M/Services/Services.cs` - 法向力计算
|
||||
- `CSI-H238M/Services/PdfReportService.cs` - 报告生成
|
||||
Reference in New Issue
Block a user