耐力训练 DSL
在 Trainingload.ai 文字/规则模式中编写并验证耐力训练步骤、目标、重复结构和运动区间。
耐力训练 DSL
这套 DSL 用于在规则输入模式中描述一节结构化耐力训练。训练计划可以包含多节训练,每节训练都会单独解析和校验。一行代表一个步骤,从上到下就是执行顺序。
本页覆盖跑步、骑行和游泳耐力步骤。动作和组数请使用力量训练结构。
开始前准备
- 编写前选择准确运动项目;运动类型会影响区间和单位解释。
- 使用
z1、z2等引用前,先配置运动员的配速、功率或心率区间。 - 判断每一步按时间、距离、能量还是传感器条件结束。
- 不需要文字编辑时,可以直接使用可视化构建器。
按顺序编写每一行
每行最多包含三部分,按以下顺序书写,并使用空格分隔:
| 顺序 | 作用 | 示例 |
|---|---|---|
| ① 这段在干啥 | 英文关键字:热身、主课、歇、收操… | warmup、work、recovery、rest、cooldown |
| ② 这一步如何结束 | 只能有一个主要条件:时间、距离、能量或传感器条件 | 5m、3km、500kj、hr<150bpm |
| ③ 可选的强度目标 | 配速、功率、心率、踏频等 | pace …、power …、hr … |
③ 最多写一个目标。每一步可以选择配速、功率、心率、踏频或坡度之一,不能同时叠加多个。多个目标应拆成不同步骤,或把次要提示放进课程备注。work: 20m 和 work 20m 等价,冒号可省略。
① 选择步骤类型
先写下面其中一个关键字。关键字不区分大小写:
| 关键字 | 含义 |
|---|---|
warmup / wu | 开始阶段的热身 |
work | 主要训练 |
recovery / rec | 主要训练之间的主动恢复 |
rest | 休息 |
cooldown / cd | 结束阶段的放松 |
other | 不属于上述类型的特殊步骤 |
需要低强度持续活动时使用 recovery,需要停止训练或完全休息时使用 rest。系统会保留该类型,用于界面显示和平台导出。
② 添加结束条件
结束条件决定该步骤何时结束,可以使用时间、距离、能量或传感器条件。每行只能有一个主要结束条件。后面的 power、hr 等内容是强度目标,不是第二个时长。
| 写法 | 含义 |
|---|---|
30s、5m、25min、1h | 按表跑多久 |
5km、400m | 跑满多远再停(3km 是三千米,不是三秒) |
500kj | 骑车按千焦凑够 |
hr<150bpm、power>250W、cadence<80rpm 等 | 心率、功率或踏频过线再进下一段 |
③ 添加可选强度目标
都在第一个度量后面,空格隔开:
| 关键字 | 干啥 |
|---|---|
pace | 配速,跑步常用 |
speed | 速度,界面会根据运动项目显示为配速或 km/h |
power | 功率:推荐写瓦 250W;只写数字 250 也按瓦解析;仍兼容旧写法 85%(相对 FTP) |
cadence | 踏频 |
hr | 心率:支持 bpm(150bpm、区间 150-160bpm、上限 <150bpm 或只写数字 150),也支持区间引用 hr z2 |
grade | 坡度 |
旧写法 pwr、cad、rpm 仍能解析,但新生成的 DSL 会使用完整关键字。
DSL 关键字、单位和区间 token 不区分大小写;WORK 25M HR Z2 和 work 25m hr z2 解析结果一样。保存或重新展示时会统一成小写关键字。
如果需要引用运动员当前训练区间,而不是固定一组数值,可以写:
work 25m hr z2
work 10m power z4
work 20m pace z2这种写法表示“按运动员当前的 Z2 / Z4 区间执行”。区间变化后,系统可以按新区间解释;如果需要固定具体数值,则写 hr 140-150bpm、power 220-250W 或 pace 4:30-4:45。
注意把「这段怎么结束」和「这段盯什么目标」分开:
work hr<150bpm
work 25m hr <150bpm第一行是心率触发结束条件,不能再额外跟 target;第二行是跑 25 分钟,同时把心率 150 bpm 当上限。
使用 repeat 重复一组步骤
需要重复相同步骤时,把它们放入 repeat 块:
repeat 4 {
work 4m power 270W
recovery 2m
}repeat 4表示把大括号内的步骤执行四次。- 大括号内两行构成一轮。本例会执行四轮“270 W 骑行 4 分钟,再恢复 2 分钟”。部分版本也支持使用
end或endrepeat结束重复块,以当前编辑器的校验结果为准。
例子一:跑步课
warmup 5m
work 20m pace 7:20-8:20/km
recovery 90s
work 3km
cooldown 5mwarmup 5m:热身 5 分钟。work 20m pace …:主要训练 20 分钟,目标配速约为 7:20~8:20/公里。recovery 90s:恢复 90 秒。work 3km:再跑 3 公里(按距离,不是再跑 20 分钟)。cooldown 5m:最后放松 5 分钟。
从上往下读,就是今天这节课的先后顺序。
例子二:骑车
work 8m power 220-250W
recovery 2m
work 5m hr 150-160bpm- 第一行:骑 8 分钟,功率 220~250 瓦。
- 第二行:松 2 分钟,没写别的就纯轻松骑。
- 第三行:再 5 分钟,心率 150~160。
例子三:四组间歇
repeat 4 {
work 4m power 270W
recovery 2m
}四轮都包含 270 瓦骑行 4 分钟和恢复 2 分钟。使用 repeat 可以避免重复书写并减少次数错误。
除了固定次数,DSL 也能表达“重复直到某个条件”:
repeat until 30m {
work 4m power 270W
recovery 2m
}
repeat until 5km {
work 400m pace 4:00-4:15
recovery 200m
}repeat until 支持时间、距离、热量、心率、功率和踏频条件,例如 30m、5km、500kj、hr<140bpm、power>250W、cadence<80rpm。目前不允许 repeat 里面再套 repeat;如果第三方设备不支持某种结束条件,系统会明确标记为不可导出或需要降级,不会静默改变训练结构。
验证并保存
- 在训练编辑器选择规则输入。
- 输入或粘贴 DSL。
- 页面提供解析或预览操作时,先执行一次。
- 对照规范化文本和可视化预览,检查步骤顺序。
- 保存后重新打开课程,确认运动、时长、重复次数和目标。
保存后的文本可能被规范化为小写关键字和标准单位,这是预期行为;课程含义发生变化则不是。
运动项目和 DSL 能力
计划课会保存精确运动项目,例如公路跑、越野跑、跑步机、公路骑行、山地骑行、室内骑行、泳池游泳和开放水域游泳。相近项目仍会共用跑步、骑行或游泳的区间与负荷分析,但同步到 Suunto、Intervals.icu 或 COROS 时会优先使用精确项目。
接口中的 sportType 是跑步、骑行、游泳等大类;subSportType 是 TRAIL_RUNNING、INDOOR_CYCLING 这样的标准小类。
选择器中不可选的项目表示当前结构化编辑器还不能无损表达该项目;它仍可作为活动类型使用。系统不会把不支持的结构静默改成另一种训练。
验证课程结果
- 每个步骤都按源码顺序出现在预览中。
- 每行只有一个主要结束条件,并且最多一个目标。
- 区间引用使用了正确运动和个人资料。
- 重复块包含预期步骤以及次数或结束条件。
- 重新打开后,课程结构和运动小类保持一致。
故障排查
- **提示未知关键字:**改用文档列出的步骤类型或目标名称,并删除语法中未出现的标点。
- **时长或距离错误:**检查单位与位置;步骤类型后的第一个度量是结束条件。
- **多个目标无法解析:**一行只保留一个目标,次要提示放入备注或另一独立步骤。
- 阈值结束步骤不能增加目标:
work hr<150bpm已经把心率作为结束条件;固定 25 分钟并限制心率应写work 25m hr <150bpm。 - **重复块失败:**闭合大括号,不要嵌套 repeat,并检查
repeat until条件。 - **切换运动后预览改变:**区间和单位含义依赖运动类型;重新选择正确运动并检查全部目标。
- **导出提示降级或不支持:**阅读平台警告后再简化,不能假设所有设备都支持条件重复。