Files
SWdata-texttoCAD/json范例/planetary_joint.sop.v2.schema.json
T

257 lines
10 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://simplecad.local/schemas/planetary-joint-sop-v2.schema.json",
"title": "SimpleCAD planetary-joint executable SOP V2",
"type": "object",
"additionalProperties": false,
"required": [
"schema", "design_id", "units", "axis_convention", "assembly_layout", "definitions",
"instances", "expected_definition_counts", "assembly_root_instance_id", "assembly_relations",
"transmission", "public_connectors", "interference_contract", "verification", "runtime_policy"
],
"properties": {
"schema": {"const": "simplecad.std.planetary_joint.sop.v2"},
"design_id": {"type": "string", "minLength": 1},
"units": {"const": "millimetre_degree"},
"axis_convention": {
"type": "object", "additionalProperties": false,
"required": ["main_axis", "radial_plane", "right_handed"],
"properties": {
"main_axis": {"enum": ["x", "y", "z"]},
"radial_plane": {"enum": ["xy", "yz", "zx"]},
"right_handed": {"const": true}
}
},
"assembly_layout": {
"type": "object", "additionalProperties": false,
"required": ["method", "calibration_role", "rules"],
"properties": {
"method": {"const": "semantic_axial_orbit"},
"calibration_role": {"const": "offline_dimensions_only"},
"rules": {
"type": "array", "minItems": 16,
"items": {"$ref": "#/$defs/layout_rule"}
}
}
},
"definitions": {
"type": "array", "minItems": 16, "maxItems": 16,
"items": {"$ref": "#/$defs/definition"}
},
"instances": {
"type": "array", "minItems": 22, "maxItems": 22,
"items": {"$ref": "#/$defs/instance"}
},
"expected_definition_counts": {
"type": "array", "minItems": 16, "maxItems": 16,
"items": {
"type": "object", "additionalProperties": false,
"required": ["definition_id", "count"],
"properties": {
"definition_id": {"type": "string", "minLength": 1},
"count": {"type": "integer", "minimum": 1}
}
}
},
"assembly_root_instance_id": {"type": "string", "minLength": 1},
"assembly_relations": {
"type": "array", "minItems": 1,
"items": {"$ref": "#/$defs/relation"}
},
"transmission": {"$ref": "#/$defs/transmission"},
"public_connectors": {
"type": "array", "minItems": 3, "maxItems": 3,
"items": {
"type": "object", "additionalProperties": false,
"required": ["id", "source"],
"properties": {
"id": {"type": "string", "minLength": 1},
"source": {"$ref": "#/$defs/endpoint"}
}
}
},
"interference_contract": {
"type": "object", "additionalProperties": false,
"required": ["policy", "volume_tolerance_mm3", "motion_samples_degrees", "designed_interference_fits"],
"properties": {
"policy": {"const": "no_unlisted_positive_volume"},
"volume_tolerance_mm3": {"type": "number", "minimum": 0},
"motion_samples_degrees": {
"type": "array", "minItems": 2, "uniqueItems": true,
"items": {"type": "number"}
},
"designed_interference_fits": {
"type": "array", "items": {"$ref": "#/$defs/interference_fit"}
}
}
},
"verification": {
"type": "object", "additionalProperties": false,
"required": ["default_geometry", "assembly", "motion", "parameter_sweeps"],
"properties": {
"default_geometry": {"enum": ["strict_brep", "numeric_per_solid", "interface_only"]},
"assembly": {"const": "connector_residuals_and_collision"},
"motion": {"const": "willis_residual_and_interference_sweep"},
"parameter_sweeps": {"type": "integer", "minimum": 2}
}
},
"runtime_policy": {
"type": "object", "additionalProperties": false,
"required": ["teacher_geometry_allowed", "absolute_matrix_replay_allowed", "source_cad_required", "checksum_locked_cots_step_allowed"],
"properties": {
"teacher_geometry_allowed": {"const": false},
"absolute_matrix_replay_allowed": {"const": false},
"source_cad_required": {"const": false},
"checksum_locked_cots_step_allowed": {"const": true}
}
}
},
"$defs": {
"layout_rule": {
"type": "object", "additionalProperties": false,
"required": ["selector", "mode"],
"properties": {
"selector": {"type": "string", "pattern": "^(instance|definition):[^:]+$"},
"mode": {"enum": ["root", "coaxial", "orbit"]},
"axial_mm": {"type": "number"},
"radial_mm": {"type": "number", "minimum": 0},
"radial_angle_degrees": {"type": "number"},
"orbit_phase_degrees": {"type": "number"},
"local_axis": {"enum": ["x", "y", "z"]},
"axis_direction": {"enum": [-1, 1]},
"clock_degrees": {"type": "number"},
"clock_step_degrees": {"type": "number"}
},
"allOf": [
{
"if": {"properties": {"mode": {"const": "root"}}},
"then": {"required": ["selector", "mode"]},
"else": {"required": ["axial_mm", "local_axis", "axis_direction", "clock_degrees"]}
},
{
"if": {"properties": {"mode": {"const": "orbit"}}},
"then": {"required": ["orbit_phase_degrees", "clock_step_degrees"]}
}
]
},
"connector": {
"type": "object", "additionalProperties": false,
"required": ["id", "kind"],
"properties": {
"id": {"type": "string", "minLength": 1},
"kind": {"enum": ["frame", "revolute_axis", "mount", "gear_axis", "bearing_seat", "shaft_hub"]}
}
},
"definition": {
"type": "object", "additionalProperties": false,
"required": ["id", "family", "generator", "source_mode", "maturity", "connectors"],
"properties": {
"id": {"type": "string", "minLength": 1},
"family": {"type": "string", "minLength": 1},
"generator": {"type": "string", "pattern": "^simplecadapi\\.std\\."},
"source_mode": {"enum": ["formula_std", "cots_step"]},
"maturity": {"enum": ["formula_verified", "formula_provisional", "cots_step_verified"]},
"cots_asset": {"$ref": "#/$defs/cots_asset"},
"connectors": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/connector"}}
},
"allOf": [
{
"if": {"properties": {"source_mode": {"const": "cots_step"}}},
"then": {"required": ["cots_asset"], "properties": {"maturity": {"const": "cots_step_verified"}}},
"else": {"not": {"required": ["cots_asset"]}}
}
]
},
"cots_asset": {
"type": "object", "additionalProperties": false,
"required": ["path", "sha256", "solid_count", "geometry_editability"],
"properties": {
"path": {"type": "string", "pattern": "^[^/].*\\.step$"},
"sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"},
"solid_count": {"type": "integer", "minimum": 1},
"geometry_editability": {"const": "immutable"}
}
},
"instance": {
"type": "object", "additionalProperties": false,
"required": ["id", "definition_id"],
"properties": {
"id": {"type": "string", "minLength": 1},
"definition_id": {"type": "string", "minLength": 1},
"pattern_index": {"type": "integer", "minimum": 0}
}
},
"endpoint": {
"type": "object", "additionalProperties": false,
"required": ["instance_id", "connector_id"],
"properties": {
"instance_id": {"type": "string", "minLength": 1},
"connector_id": {"type": "string", "minLength": 1}
}
},
"relation": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "a", "b"],
"properties": {
"id": {"type": "string", "minLength": 1},
"type": {"enum": ["fixed", "revolute", "bearing_support", "shaft_hub", "coaxial"]},
"a": {"$ref": "#/$defs/endpoint"},
"b": {"$ref": "#/$defs/endpoint"},
"motion_role": {"enum": ["input", "output", "planet_spin", "free"]},
"phase_offset_degrees": {"type": "number"}
}
},
"interference_fit": {
"type": "object", "additionalProperties": false,
"required": ["id", "a", "b", "type", "target_volume_mm3", "volume_tolerance_mm3", "evidence"],
"properties": {
"id": {"type": "string", "minLength": 1},
"a": {"type": "string", "minLength": 1},
"b": {"type": "string", "minLength": 1},
"type": {"const": "source_matched_press_fit"},
"target_volume_mm3": {"type": "number", "exclusiveMinimum": 0},
"volume_tolerance_mm3": {"type": "number", "minimum": 0},
"evidence": {"type": "string", "minLength": 1}
}
},
"mesh": {
"type": "object", "additionalProperties": false,
"required": ["id", "type", "a", "b", "backlash_mm"],
"properties": {
"id": {"type": "string", "minLength": 1},
"type": {"enum": ["external", "internal"]},
"a": {"type": "string", "minLength": 1},
"b": {"type": "string", "minLength": 1},
"backlash_mm": {"type": "number", "minimum": 0}
}
},
"transmission": {
"type": "object", "additionalProperties": false,
"required": ["type", "module_mm", "pressure_angle_deg", "teeth", "planet_count", "center_radius_mm", "center_tolerance_mm", "fixed_member", "input_member", "output_member", "fixed_ring_ratio", "ratio_tolerance", "meshes"],
"properties": {
"type": {"const": "simple_planetary"},
"module_mm": {"type": "number", "exclusiveMinimum": 0},
"pressure_angle_deg": {"type": "number", "exclusiveMinimum": 0, "exclusiveMaximum": 90},
"teeth": {
"type": "object", "additionalProperties": false,
"required": ["sun", "planet", "ring"],
"properties": {
"sun": {"type": "integer", "minimum": 6},
"planet": {"type": "integer", "minimum": 6},
"ring": {"type": "integer", "minimum": 12}
}
},
"planet_count": {"type": "integer", "minimum": 2},
"center_radius_mm": {"type": "number", "exclusiveMinimum": 0},
"center_tolerance_mm": {"type": "number", "minimum": 0},
"fixed_member": {"const": "ring_gear"},
"input_member": {"const": "sun_gear"},
"output_member": {"const": "carrier"},
"fixed_ring_ratio": {"type": "number", "exclusiveMinimum": 1},
"ratio_tolerance": {"type": "number", "minimum": 0},
"meshes": {"type": "array", "minItems": 6, "maxItems": 6, "items": {"$ref": "#/$defs/mesh"}}
}
}
}
}