同步仿真框架并接入AMESim气动组件

This commit is contained in:
huojiarong committed 2026-07-30 03:53:10 +00:00
1 parent 420bafeb4e
commit db4bdb4b70
109 files changed
+26920 -420

No files matched your search

+304
View File
@@ -0,0 +1,304 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://systemsimulation.local/schemas/component-catalog-v1.schema.json",
"title": "SystemSimulation Component Catalog v1",
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion",
"libraries"
],
"properties": {
"schemaVersion": {
"const": 1
},
"libraries": {
"type": "array",
"items": {
"$ref": "#/$defs/library"
}
}
},
"$defs": {
"machineId": {
"type": "string",
"pattern": "^[a-z][a-z0-9_]*$"
},
"version": {
"type": "string",
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$"
},
"category": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"label",
"order"
],
"properties": {
"id": {
"$ref": "#/$defs/machineId"
},
"label": {
"type": "string",
"minLength": 1
},
"order": {
"type": "integer"
}
}
},
"portVariable": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"role",
"connectionRule",
"label",
"quantity",
"unit",
"resultVisible",
"order"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]*$"
},
"role": {
"enum": [
"effort",
"flow",
"stream",
"signal"
]
},
"connectionRule": {
"enum": [
"equal",
"sumToZero",
"streamMix",
"directed"
]
},
"label": {
"type": "string",
"minLength": 1
},
"quantity": {
"type": "string",
"minLength": 1
},
"unit": {
"type": "string"
},
"resultVisible": {
"type": "boolean"
},
"order": {
"type": "integer"
}
}
},
"port": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"kind",
"domain",
"nominalRole",
"positiveFlowDirection",
"variables",
"side",
"order"
],
"properties": {
"name": {
"$ref": "#/$defs/machineId"
},
"kind": {
"enum": [
"physical",
"signal"
]
},
"domain": {
"$ref": "#/$defs/machineId"
},
"nominalRole": {
"enum": [
"inlet",
"outlet",
"bidirectional",
"input",
"output"
]
},
"positiveFlowDirection": {
"enum": [
"intoComponent",
null
]
},
"variables": {
"type": "array",
"items": {
"$ref": "#/$defs/portVariable"
}
},
"side": {
"enum": [
"left",
"right"
]
},
"order": {
"type": "integer"
}
}
},
"parameter": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"label",
"quantity",
"unit",
"default",
"minimumExclusive"
],
"properties": {
"name": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_]*$"
},
"label": {
"type": "string",
"minLength": 1
},
"quantity": {
"type": "string",
"minLength": 1
},
"unit": {
"type": "string"
},
"default": {
"type": "number"
},
"minimum": {
"type": "number"
},
"maximum": {
"type": "number"
},
"minimumExclusive": {
"type": "boolean"
}
}
},
"component": {
"type": "object",
"additionalProperties": false,
"required": [
"type",
"modelType",
"modelVersion",
"label",
"symbol",
"order",
"category",
"ports",
"parameters"
],
"properties": {
"type": {
"$ref": "#/$defs/machineId"
},
"modelType": {
"$ref": "#/$defs/machineId"
},
"modelVersion": {
"$ref": "#/$defs/version"
},
"label": {
"type": "string",
"minLength": 1
},
"symbol": {
"$ref": "#/$defs/machineId"
},
"order": {
"type": "integer"
},
"category": {
"$ref": "#/$defs/category"
},
"ports": {
"type": "array",
"items": {
"$ref": "#/$defs/port"
}
},
"parameters": {
"type": "array",
"items": {
"$ref": "#/$defs/parameter"
}
}
}
},
"library": {
"type": "object",
"additionalProperties": false,
"required": [
"id",
"label",
"version",
"sourcePackage",
"temporary",
"order",
"categories",
"components"
],
"properties": {
"id": {
"$ref": "#/$defs/machineId"
},
"label": {
"type": "string",
"minLength": 1
},
"version": {
"$ref": "#/$defs/version"
},
"sourcePackage": {
"type": "string",
"minLength": 1
},
"temporary": {
"type": "boolean"
},
"order": {
"type": "integer"
},
"categories": {
"type": "array",
"items": {
"$ref": "#/$defs/category"
}
},
"components": {
"type": "array",
"items": {
"$ref": "#/$defs/component"
}
}
}
}
}
}
+80
View File
@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PositiveDouble">
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="System">
<xs:complexType>
<xs:sequence>
<xs:element name="Simulation">
<xs:complexType>
<xs:attribute name="tStart" type="xs:double" use="required"/>
<xs:attribute name="tStop" type="xs:double" use="required"/>
<xs:attribute name="step" type="PositiveDouble" use="required"/>
<xs:attribute name="maxStep" type="PositiveDouble" use="required"/>
<xs:attribute name="method" type="NonEmptyString" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Components">
<xs:complexType>
<xs:sequence>
<xs:element name="Component" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Port" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="value" type="xs:double" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="NonEmptyString" use="required"/>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="type" type="NonEmptyString" use="required"/>
<xs:attribute name="componentType" type="NonEmptyString" use="required"/>
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Connections">
<xs:complexType>
<xs:sequence>
<xs:element name="Connection" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="NonEmptyString" use="required"/>
<xs:attribute name="source" type="NonEmptyString" use="required"/>
<xs:attribute name="sourcePort" type="NonEmptyString" use="required"/>
<xs:attribute name="target" type="NonEmptyString" use="required"/>
<xs:attribute name="targetPort" type="NonEmptyString" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="schemaVersion" use="required" fixed="1"/>
<xs:attribute name="unitSystem" use="required" fixed="SI"/>
</xs:complexType>
</xs:element>
</xs:schema>
+135
View File
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:simpleType name="NonEmptyString">
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PositiveDouble">
<xs:restriction base="xs:double">
<xs:minExclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PortKind">
<xs:restriction base="xs:string">
<xs:enumeration value="physical"/>
<xs:enumeration value="signal"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PortNominalRole">
<xs:restriction base="xs:string">
<xs:enumeration value="inlet"/>
<xs:enumeration value="outlet"/>
<xs:enumeration value="bidirectional"/>
<xs:enumeration value="input"/>
<xs:enumeration value="output"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="PortSide">
<xs:restriction base="xs:string">
<xs:enumeration value="left"/>
<xs:enumeration value="right"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="EndpointRole">
<xs:restriction base="xs:string">
<xs:enumeration value="source"/>
<xs:enumeration value="target"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NodeRotation">
<xs:restriction base="xs:integer">
<xs:enumeration value="0"/>
<xs:enumeration value="90"/>
<xs:enumeration value="180"/>
<xs:enumeration value="270"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="System">
<xs:complexType>
<xs:sequence>
<xs:element name="Simulation">
<xs:complexType>
<xs:attribute name="tStart" type="xs:double" use="required"/>
<xs:attribute name="tStop" type="xs:double" use="required"/>
<xs:attribute name="step" type="PositiveDouble" use="required"/>
<xs:attribute name="maxStep" type="PositiveDouble" use="required"/>
<xs:attribute name="method" type="NonEmptyString" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Components">
<xs:complexType>
<xs:sequence>
<xs:element name="Component" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Port" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="kind" type="PortKind" use="required"/>
<xs:attribute name="domain" type="NonEmptyString" use="required"/>
<xs:attribute name="nominalRole" type="PortNominalRole" use="required"/>
<xs:attribute name="positiveFlowDirection" use="optional" fixed="intoComponent"/>
<xs:attribute name="side" type="PortSide" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Parameter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="value" type="xs:double" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="NonEmptyString" use="required"/>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="type" type="NonEmptyString" use="required"/>
<xs:attribute name="componentType" type="NonEmptyString" use="required"/>
<xs:attribute name="x" type="xs:double" use="required"/>
<xs:attribute name="y" type="xs:double" use="required"/>
<xs:attribute name="rotation" type="NodeRotation" use="optional" default="0"/>
<xs:attribute name="mirrored" type="xs:boolean" use="optional" default="false"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Connections">
<xs:complexType>
<xs:sequence>
<xs:element name="Connection" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Endpoint" minOccurs="2" maxOccurs="2">
<xs:complexType>
<xs:attribute name="component" type="NonEmptyString" use="required"/>
<xs:attribute name="port" type="NonEmptyString" use="required"/>
<xs:attribute name="role" type="EndpointRole" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="NonEmptyString" use="required"/>
<xs:attribute name="kind" type="PortKind" use="required"/>
<xs:attribute name="domain" type="NonEmptyString" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="NonEmptyString" use="required"/>
<xs:attribute name="schemaVersion" use="required" fixed="2"/>
<xs:attribute name="unitSystem" use="required" fixed="SI"/>
</xs:complexType>
</xs:element>
</xs:schema>