Files
OrcaSlicer/doc/developer-reference/Acceleration_Correction.md
xiaoyeliu b43cfaaaf9 2.2.0 flutter & WCP & Network Test (#54)
* Add docs about time_estimate

* Fix: Problems with graceful program exit caused by Flutter refactoring

* Add: sw_OpenBrowser() & sw_OpenOrcaWebview

* Fix: NetworkTestDialog Crash & Add: Lan Device test \ cloud test
2025-12-09 10:39:27 +08:00

211 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 问题1纠正E最大加速度 vs 挤出最大加速度
## 我之前的错误分析
我之前说"会使用5000"是**错误的**!感谢你的测试发现了问题。
## 正确的理解
### 代码逻辑重新分析
**位置**: `src/libslic3r/GCode/GCodeProcessor.cpp`
#### 步骤1: 初始化加速度Line 770-773
```cpp
// 从machine_max_acceleration_extruding读取
float max_acceleration = get_option_value(
m_time_processor.machine_limits.machine_max_acceleration_extruding, i);
// 设置为machines的加速度
m_time_processor.machines[i].max_acceleration = max_acceleration;
m_time_processor.machines[i].acceleration = max_acceleration;
```
**关键点**:
- `machines[i].acceleration` = `machine_max_acceleration_extruding`
- 场景1: acceleration = **20000**
- 场景2: acceleration = **5000**
#### 步骤2: 获取打印移动的加速度Line 2827-2831
```cpp
float acceleration = get_acceleration(static_cast<PrintEstimatedStatistics::ETimeMode>(i));
// 返回 machines[i].acceleration
```
**结果**:
- 场景1: acceleration = **20000**从extruding配置
- 场景2: acceleration = **5000**从extruding配置
#### 步骤3: 检查各轴加速度限制Line 2834-2838
```cpp
for (unsigned char a = X; a <= E; ++a) {
float axis_max_acceleration = get_axis_max_acceleration(..., static_cast<Axis>(a));
// 对E轴axis_max_acceleration = 5000
// 检查这个轴的加速度分量是否超过限制
if (acceleration * std::abs(delta_pos[a]) * inv_distance > axis_max_acceleration)
acceleration = axis_max_acceleration / (std::abs(delta_pos[a]) * inv_distance);
}
```
### 关键区别理解
**`machine_max_acceleration_extruding`(挤出最大加速度)**:
- **主要限制**:打印移动的整体加速度上限
- 直接决定`acceleration`的初始值
**`machine_max_acceleration_e`E轴最大加速度**:
- **次要检查**确保E轴的加速度分量不超限
- 只在E轴分量超限时才降低整体加速度
### 实际计算示例
**假设打印移动**100mm距离XY=99mmE=5mm
**场景1extruding=20000, e=5000**
```
1. acceleration = 20000从extruding配置
2. 检查E轴
- E轴比例 = 5/100 = 0.05
- E轴加速度分量 = 20000 * 0.05 = 1000 mm/s²
- E轴限制 = 5000 mm/s²
- 1000 < 5000 ✓ 不超限
3. 最终使用acceleration = 20000 mm/s²
```
**场景2extruding=5000, e=5000**
```
1. acceleration = 5000从extruding配置
2. 检查E轴
- E轴比例 = 5/100 = 0.05
- E轴加速度分量 = 5000 * 0.05 = 250 mm/s²
- E轴限制 = 5000 mm/s²
- 250 < 5000 ✓ 不超限
3. 最终使用acceleration = 5000 mm/s²
```
**结果对比**
- 场景1用20000加速更快**时间更短** ✓
- 场景2用5000加速更慢**时间更长** ✓
这与你的测试结果一致!
### E轴限制什么时候生效
只有当**E轴占比很大**时E轴限制才会降低整体加速度。
**示例E占比50%**100mm移动XY=50mmE=50mm
**场景1extruding=20000, e=5000**
```
1. acceleration = 20000
2. 检查E轴
- E轴比例 = 50/100 = 0.5
- E轴加速度分量 = 20000 * 0.5 = 10000 mm/s²
- E轴限制 = 5000 mm/s²
- 10000 > 5000 ✗ 超限!
3. 调整加速度:
- acceleration = 5000 / 0.5 = 10000 mm/s²
- 验证10000 * 0.5 = 5000 ✓
4. 最终使用acceleration = 10000 mm/s²被E轴限制降低了
```
**场景2extruding=5000, e=5000**
```
1. acceleration = 5000
2. 检查E轴
- E轴加速度分量 = 5000 * 0.5 = 2500 mm/s²
- E轴限制 = 5000 mm/s²
- 2500 < 5000 ✓ 不超限
3. 最终使用acceleration = 5000 mm/s²
```
**结果对比**
- 场景1用10000被E轴限制从20000降到10000
- 场景2用5000
- 场景1仍然更快
## 正确的结论
### 主从关系
1. **`machine_max_acceleration_extruding`是主要限制**
- 决定了打印移动的基础加速度
- **直接影响时间估算**
- 设置20000 vs 5000会导致显著的时间差异
2. **`machine_max_acceleration_e`是辅助检查**
- 只检查E轴分量是否超限
- 对于正常打印E占比通常5-20%**很少触发**
- 只在E占比>25%时才可能降低加速度
### 你的测试结果解释
```
测试1E最大=5000挤出最大=20000
→ 大部分移动使用20000加速度
→ 时间较短
测试2E最大=5000挤出最大=5000
→ 大部分移动使用5000加速度
→ 时间较长约4倍加速时间
结论:挤出最大加速度是主要决定因素 ✓
```
### 时间差异计算示例
**假设**100mm移动从0加速到100 mm/s
**加速度20000 mm/s²**:
- 加速时间 = 100 / 20000 = 0.005秒
- 加速距离 = 0.5 * 100 * 0.005 = 0.25mm
**加速度5000 mm/s²**:
- 加速时间 = 100 / 5000 = 0.02秒
- 加速距离 = 0.5 * 100 * 0.02 = 1mm
**时间差**0.02 - 0.005 = **0.015秒**每次加速多3倍时间
对于一个典型的打印任务10000次移动块累积时间差可能达到**2-5分钟**
## 修正后的理解
| 参数 | 作用 | 影响程度 |
|-----|------|---------|
| `machine_max_acceleration_extruding` | 打印时整体加速度 | ⭐⭐⭐⭐⭐ 主要 |
| `machine_max_acceleration_e` | E轴分量限制 | ⭐⭐ 次要(通常不触发) |
**优先级**extruding > e对正常打印
## 我之前错误的原因
我错误地认为"E轴限制会把加速度直接降到5000",但实际上:
- E轴限制只检查**E轴分量**
- 如果E占比小5-20%E轴分量 = 加速度 × 5-20%
- 即使加速度是20000E轴分量只有1000-4000不超过5000
- 所以E轴限制**不会触发**
只有E占比>25%时E轴限制才会降低加速度但仍然不是降到5000而是降到满足"E轴分量=5000"的程度。
## 感谢你的测试!
你的实际测试证明了:
- **extruding挤出最大加速度是关键参数**
- 改变它会显著影响打印时间
- 我之前的分析是错误的
正确答案是:**会使用20000**对于正常E占比的打印移动