9.5 KiB
构型 JSON 填写说明
本文档给负责构型设计的机械工程师使用。你只需要按照现有 topology.template.json 格式创建新的构型 JSON,不需要关心 Python 代码如何实现。
构型 JSON 描述的是“这个传动系统由哪些运动构件组成、构件之间有什么机械关系”。它不填写目标速比、齿数、模数、材料、输出路径,也不填写具体三维坐标。
1. 文件位置和命名
每个构型族一个目录:
src/configurations/<family_name>/topology.template.json
例子:
src/configurations/simple_2k_h/topology.template.json
src/configurations/simple_2k_h_cascade/topology.template.json
<family_name> 用小写英文和下划线,例如:
simple_2k_h
simple_2k_h_cascade
compound_planet
differential_planet
2. 顶层结构
一个构型 JSON 必须包含:
{
"template_id": "simple_2k_h_v0_1",
"family": "simple_2k_h",
"description": "简短描述",
"nodes": [],
"relations": []
}
字段说明:
| 字段 | 必填 | 怎么填 |
|---|---|---|
template_id |
是 | 模板唯一编号,建议 <family>_v0_1 |
family |
是 | 构型族名称,必须和目录名一致 |
description |
是 | 一句话说明构型,不写公式长文 |
nodes |
是 | 构件节点列表 |
relations |
是 | 构件关系列表 |
3. nodes 怎么填
nodes 表示构型里有哪些构件或参考对象。
节点格式:
{
"id": "sun",
"kind": "gear",
"role": "sun",
"gear_type": "external",
"repeat": "single",
"formula_ref": "nodes.sun",
"stage_id": null,
"local_role": "sun"
}
字段说明:
| 字段 | 必填 | 可选值 / 填法 | 说明 |
|---|---|---|---|
id |
是 | 英文唯一名 | 关系里会用它引用节点 |
kind |
是 | gear / carrier / housing / axis |
节点类型 |
role |
是 | sun、ring、planet、carrier 等 |
机械角色 |
gear_type |
是 | external / internal / null |
只有齿轮填齿轮类型 |
repeat |
是 | single / planet_count |
是否按行星数量展开 |
formula_ref |
是 | 字符串 | 便于反查来源 |
stage_id |
否 | null 或 s1、s2 |
多级构型可用 |
local_role |
否 | sun、ring、planet 等 |
stage 内局部角色 |
kind 选择
| 机械对象 | kind |
|---|---|
| 太阳轮、齿圈、行星轮 | gear |
| 行星架 | carrier |
| 壳体、机架、固定参考 | housing |
| 主轴线、参考轴 | axis |
gear_type 选择
| 齿轮 | gear_type |
|---|---|
| 太阳轮 | external |
| 行星轮 | external |
| 内齿圈 | internal |
| 非齿轮节点 | null |
repeat 选择
| 情况 | repeat |
|---|---|
| 只有一个,例如 sun、ring、carrier、housing | single |
| 按行星数量重复,例如 planet | planet_count |
注意:不要手写 planet_1、planet_2、planet_3。只写一个 planet 节点,并设置:
"repeat": "planet_count"
程序会自动展开。
4. relations 怎么填
relations 表示节点之间有什么机械关系。
关系格式:
{
"id": "sun_planet_external_mesh",
"source": "sun",
"target": "planet",
"relation_type": "external_mesh",
"carrier_ref": "carrier",
"mesh_id": "sun_planet",
"formula_ref": "relations.sun_planet_external_mesh",
"stage_id": null
}
字段说明:
| 字段 | 必填 | 怎么填 |
|---|---|---|
id |
是 | 关系唯一名 |
source |
是 | 起点 node id |
target |
是 | 终点 node id |
relation_type |
是 | 见下表 |
carrier_ref |
否 | 行星啮合通常填 carrier |
mesh_id |
否 | 同一组啮合的名字 |
formula_ref |
是 | 便于反查来源 |
stage_id |
否 | 多级构型可填 stage 标识 |
当前允许的 relation_type:
| relation_type | 含义 | 典型 source -> target |
|---|---|---|
external_mesh |
外齿轮与外齿轮啮合 | sun -> planet |
internal_mesh |
内齿圈与外齿轮啮合 | ring -> planet |
revolute_joint |
转动副 | planet -> carrier |
coaxial |
同轴 | sun -> main_axis |
fixed |
固定到壳体或固定参考 | ring -> housing |
rigid |
刚性连接,同速转动 | s1_carrier -> s2_sun |
5. 常见关系填写规则
外啮合
太阳轮和行星轮外啮合:
{
"id": "sun_planet_external_mesh",
"source": "sun",
"target": "planet",
"relation_type": "external_mesh",
"carrier_ref": "carrier",
"mesh_id": "sun_planet",
"formula_ref": "relations.sun_planet_external_mesh"
}
要点:
source和target都应该是gear_type = external。- 行星机构里要填
carrier_ref,表示啮合是在行星架参考系下建立运动方程。
内啮合
内齿圈和行星轮内啮合:
{
"id": "ring_planet_internal_mesh",
"source": "ring",
"target": "planet",
"relation_type": "internal_mesh",
"carrier_ref": "carrier",
"mesh_id": "ring_planet",
"formula_ref": "relations.ring_planet_internal_mesh"
}
要点:
- 内齿圈节点必须是
gear_type = internal。 - 行星轮节点必须是
gear_type = external。
行星轮转动副
行星轮绕行星架销轴转动:
{
"id": "planet_carrier_pin_revolute",
"source": "planet",
"target": "carrier",
"relation_type": "revolute_joint",
"carrier_ref": "carrier",
"mesh_id": null,
"formula_ref": "relations.planet_carrier_pin_revolute"
}
同轴
太阳轮、齿圈、行星架和主轴同轴:
{
"id": "sun_main_axis_coaxial",
"source": "sun",
"target": "main_axis",
"relation_type": "coaxial",
"carrier_ref": null,
"mesh_id": null,
"formula_ref": "relations.sun_main_axis_coaxial"
}
通常至少要写:
sun -> main_axis
ring -> main_axis
carrier -> main_axis
固定
齿圈固定到壳体:
{
"id": "ring_housing_fixed",
"source": "ring",
"target": "housing",
"relation_type": "fixed",
"carrier_ref": null,
"mesh_id": null,
"formula_ref": "relations.ring_housing_fixed"
}
注意:实际哪个构件固定,还会受 requirement 的 fixed 字段影响。单级边界变体中,如果 requirement 写 fixed = sun,运行时会把 fixed 关系改成 sun 固定到 housing。
刚性连接
两级串联中,前一级输出和后一级输入刚性连接:
{
"id": "stage_output_to_next_input_rigid",
"source": "stage_carrier",
"target": "stage_sun",
"relation_type": "rigid",
"carrier_ref": null,
"mesh_id": null,
"formula_ref": "cascade.relations.output_to_next_input",
"stage_id": "cascade"
}
要点:
rigid表示两个运动构件角速度相同。- 多级构型里通常由程序根据 stage 生成真实组件名,例如
s1_carrier -> s2_sun。
6. 单级 simple_2k_h 示例
这是最常见结构:
sun 输入
ring 固定
carrier 输出
planet 均布
必须包含节点:
sun: external gear, single
planet: external gear, planet_count
ring: internal gear, single
carrier: carrier, single
housing: housing, single
main_axis: axis, single
必须包含关系:
sun --external_mesh--> planet
ring --internal_mesh--> planet
planet --revolute_joint--> carrier
sun/ring/carrier --coaxial--> main_axis
ring --fixed--> housing
对应文件参考:
src/configurations/simple_2k_h/topology.template.json
7. 两级串联 simple_2k_h_cascade 示例
两级串联可以理解为:
s1 是一个 simple_2k_h
s2 是一个 simple_2k_h
s1.output 刚性连接到 s2.input
模板里使用 stage_sun/stage_planet/stage_ring/stage_carrier 表示“每一级的局部节点”。程序会展开成:
s1_sun / s1_ring / s1_planet_1..n / s1_carrier
s2_sun / s2_ring / s2_planet_1..n / s2_carrier
对应文件参考:
src/configurations/simple_2k_h_cascade/topology.template.json
8. 填写检查清单
提交新的构型 JSON 前,逐项检查:
template_id唯一。family和目录名一致。- 每个
relation.source、relation.target都能在nodes.id中找到。 - 齿轮节点的
gear_type正确。 - 非齿轮节点的
gear_type是null。 - 需要重复的行星轮只写一个节点,并设置
repeat = planet_count。 - 每组行星啮合关系都填写了正确的
carrier_ref。 - 主运动构件都和
main_axis有coaxial关系。 - 固定关系使用
fixed。 - 级间或同轴齿轮组刚性连接使用
rigid。 - 没有使用未注册的
relation_type。 - 没有在 topology JSON 中填写齿数、模数、速比、坐标、材料或输出路径。
9. 不应该写进构型 JSON 的内容
以下内容不要写进 topology.template.json:
target_ratioz_sun、z_planet、z_ringmodule_mmplanet_count_candidatesface_width_mmcenter_xyz_mmaxis_xyz- STEP 文件路径
- 材料、颜色、轴承型号
- validation report 结果
这些属于 requirement、参数求解、placement、CAD 或验证输出,不属于构型模板。
10. 常见错误
| 错误 | 后果 |
|---|---|
忘记写 carrier_ref |
行星啮合运动方程无法正确使用行星架参考系 |
把 planet_1/planet_2/planet_3 写进模板 |
runtime 无法按候选行星数自动展开 |
内齿圈写成 external |
内啮合验证失败 |
非齿轮节点 gear_type 没写 null |
schema 或验证失败 |
| 使用未注册 relation type | 验证器会报 unsupported relation type |
| 在 topology 中写齿数和模数 | 构型和参数耦合,无法复用 |