完善AMESim可配置参数交互

补充气动孔口、动态管路、UD00 与弹性接触组件的离散选项、条件显示和折叠分组。

增加目录协议、非法选项和前端参数表交互回归测试,不修改现有求解公式。
This commit is contained in:
ljz committed 2026-08-04 01:27:17 +08:00
1 parent be54070855
commit df1d676131
12 files changed
+1262 -69

No files matched your search

+430
View File
@@ -14,6 +14,62 @@ const physicalPort = (
order: side === "left" ? 0 : 1,
});
const ud00StageParameters = Array.from({ length: 8 }, (_, offset) => offset + 1)
.flatMap((stage) => {
const visibleWhen =
stage === 1
? {}
: {
visibleWhen: [
{
parameter: "nstages",
values: Array.from(
{ length: 9 - stage },
(_, offset) => stage + offset,
),
},
],
};
return [
{
name: `start${stage}`,
label: `第 ${stage} 段起点`,
quantity: "dimensionless",
unit: "",
default: stage === 1 ? 0 : 1,
minimumExclusive: false,
description: `第 ${stage} 段开始时的输出值。`,
...visibleWhen,
},
{
name: `end${stage}`,
label: `第 ${stage} 段终点`,
quantity: "dimensionless",
unit: "",
default: 1,
minimumExclusive: false,
description: `第 ${stage} 段结束时的输出值。`,
...visibleWhen,
},
{
name: `t${stage}`,
label: `第 ${stage} 段时长`,
quantity: "time",
unit: "s",
default: stage === 1 ? 1 : 0,
minimum: 0,
minimumExclusive: false,
description: `第 ${stage} 段的持续时间。`,
...visibleWhen,
},
];
});
const ud00StageParameterNames = Array.from(
{ length: 8 },
(_, offset) => offset + 1,
).flatMap((stage) => [`start${stage}`, `end${stage}`, `t${stage}`]);
export const componentCatalog = {
schemaVersion: 1,
libraries: [
@@ -419,6 +475,380 @@ export const componentCatalog = {
},
],
},
{
type: "amesim_pnor001",
label: "PNOR001 常系数气动孔口",
modelType: "amesim_pnor001",
modelVersion: "0.2.0",
symbol: "symbol-not-registered",
order: 7,
category: {
id: "generic",
label: "通用组件",
order: 1,
},
ports: [],
parameterGroups: [
{
id: "flow_coefficient",
label: "流量系数",
order: 10,
parameters: ["cq", "area", "Cv", "Kv"],
defaultExpanded: false,
},
],
parameters: [
{
name: "cq",
label: "流量系数 Cq",
quantity: "dimensionless",
unit: "",
default: 0.72,
minimum: 1e-10,
maximum: 1,
minimumExclusive: false,
description: "孔口实际质量流量相对于理想可压缩流量的无量纲修正系数。",
visibleWhen: [{ parameter: "flowset", values: [1] }],
},
{
name: "area",
label: "孔口面积",
quantity: "area",
unit: "m2",
default: 5e-6,
minimum: 0,
maximum: 1,
minimumExclusive: false,
description: "选择 Cq/面积方式时用于流量计算的有效孔口面积。",
visibleWhen: [{ parameter: "flowset", values: [1] }],
},
{
name: "Cv",
label: "流量系数 Cv",
quantity: "dimensionless",
unit: "",
default: 0.5,
minimum: 0,
minimumExclusive: false,
description: "选择 Cv 方式时使用的英制流量系数。",
visibleWhen: [{ parameter: "flowset", values: [2] }],
},
{
name: "Kv",
label: "流量系数 Kv",
quantity: "dimensionless",
unit: "",
default: 0.4,
minimum: 0,
minimumExclusive: false,
description: "选择 Kv 方式时使用的公制流量系数。",
visibleWhen: [{ parameter: "flowset", values: [3] }],
},
{
name: "flowset",
label: "流量系数设置",
quantity: "dimensionless",
unit: "",
default: 1,
minimum: 1,
maximum: 3,
minimumExclusive: false,
editor: "choice",
options: [
{ value: 1, label: "Cq" },
{ value: 2, label: "Cv" },
{ value: 3, label: "Kv" },
],
description: "流量参数方式:1 使用 Cq 和面积,2 使用 Cv,3 使用 Kv。",
},
],
},
{
type: "amesim_pnl0001",
label: "PNL0001 C-R 动态管路",
modelType: "amesim_pnl0001",
modelVersion: "0.2.0",
symbol: "symbol-not-registered",
order: 8,
category: {
id: "generic",
label: "通用组件",
order: 1,
},
ports: [],
parameterGroups: [
{
id: "thermodynamics",
label: "热力学",
order: 10,
parameters: ["k", "kth", "extemp"],
defaultExpanded: false,
},
],
parameters: [
{
name: "diam",
label: "管径",
quantity: "length",
unit: "m",
default: 0.01,
minimum: 0,
minimumExclusive: true,
description: "管路的有效内径,用于计算流通面积、储气容积和摩擦压降。",
},
{
name: "k",
label: "多方指数",
quantity: "dimensionless",
unit: "",
default: 1.35,
minimum: 0,
maximum: 2,
minimumExclusive: true,
visibleWhen: [{ parameter: "mode", values: [1] }],
},
{
name: "kth",
label: "换热系数",
quantity: "heat_transfer_coefficient",
unit: "W/(m2*K)",
default: 0,
minimum: 0,
minimumExclusive: false,
visibleWhen: [{ parameter: "mode", values: [2] }],
},
{
name: "extemp",
label: "外部温度",
quantity: "temperature",
unit: "K",
default: 293.15,
minimum: 0,
minimumExclusive: true,
visibleWhen: [{ parameter: "mode", values: [2] }],
},
{
name: "mode",
label: "热模型",
quantity: "dimensionless",
unit: "",
default: 2,
minimum: 1,
maximum: 2,
minimumExclusive: false,
editor: "choice",
options: [
{ value: 1, label: "多方过程" },
{ value: 2, label: "带换热" },
],
},
],
},
{
type: "amesim_ud00",
label: "UD00 分段线性信号",
modelType: "amesim_ud00",
modelVersion: "0.2.0",
symbol: "symbol-not-registered",
order: 9,
category: {
id: "generic",
label: "通用组件",
order: 1,
},
ports: [],
parameterGroups: [
{
id: "stages",
label: "分段参数",
order: 10,
parameters: ud00StageParameterNames,
defaultExpanded: false,
},
],
parameters: [
{
name: "tstart",
label: "启动时间",
quantity: "time",
unit: "s",
default: 0,
minimumExclusive: false,
description: "分段信号开始输出第一段之前的等待时间。",
},
...ud00StageParameters,
{
name: "nstages",
label: "段数",
quantity: "dimensionless",
unit: "",
default: 1,
minimum: 1,
maximum: 8,
minimumExclusive: false,
editor: "choice",
options: Array.from({ length: 8 }, (_, offset) => ({
value: offset + 1,
label: String(offset + 1),
})),
description: "参与输出计算的有效线性分段数量。",
},
{
name: "iscyclic",
label: "循环",
quantity: "dimensionless",
unit: "",
default: 0,
minimum: 0,
maximum: 1,
minimumExclusive: false,
editor: "choice",
options: [
{ value: 0, label: "否" },
{ value: 1, label: "是" },
],
description: "当前公共协议编码:0 表示单次输出,1 表示循环输出。",
},
],
},
{
type: "amesim_lstp00a",
label: "LSTP00A 弹性接触",
modelType: "amesim_lstp00a",
modelVersion: "0.2.0",
symbol: "symbol-not-registered",
order: 10,
category: {
id: "generic",
label: "通用组件",
order: 1,
},
ports: [],
parameterGroups: [
{
id: "stiffness",
label: "刚度",
order: 10,
parameters: ["kcont", "G", "sdiam", "wdiam", "na"],
defaultExpanded: false,
},
{
id: "contact",
label: "接触",
order: 20,
parameters: ["gap0", "rcont", "Pdis"],
defaultExpanded: false,
},
],
parameters: [
{
name: "na",
label: "有效圈数",
quantity: "dimensionless",
unit: "",
default: 10,
minimum: 0,
minimumExclusive: true,
visibleWhen: [{ parameter: "stiffmode", values: [2] }],
},
{
name: "gap0",
label: "初始间隙",
quantity: "length",
unit: "m",
default: 0,
minimumExclusive: false,
},
{
name: "kcont",
label: "接触刚度",
quantity: "translational_stiffness",
unit: "N/m",
default: 1e6,
minimum: 0,
minimumExclusive: false,
visibleWhen: [{ parameter: "stiffmode", values: [1] }],
},
{
name: "G",
label: "剪切模量",
quantity: "pressure",
unit: "Pa",
default: 8.57e10,
minimum: 0,
minimumExclusive: false,
visibleWhen: [{ parameter: "stiffmode", values: [2] }],
},
{
name: "sdiam",
label: "弹簧直径",
quantity: "length",
unit: "m",
default: 0.02,
minimum: 0,
minimumExclusive: false,
visibleWhen: [{ parameter: "stiffmode", values: [2] }],
},
{
name: "wdiam",
label: "线径",
quantity: "length",
unit: "m",
default: 0.002,
minimum: 0,
minimumExclusive: false,
visibleWhen: [{ parameter: "stiffmode", values: [2] }],
},
{
name: "rcont",
label: "接触阻尼",
quantity: "translational_damping",
unit: "N/(m/s)",
default: 0,
minimum: 0,
minimumExclusive: false,
},
{
name: "Pdis",
label: "满阻尼穿透",
quantity: "length",
unit: "m",
default: 1e-7,
minimum: 0,
minimumExclusive: false,
},
{
name: "stiffmode",
label: "刚度模式",
quantity: "dimensionless",
unit: "",
default: 1,
minimum: 1,
maximum: 2,
minimumExclusive: false,
editor: "choice",
options: [
{ value: 1, label: "数值刚度" },
{ value: 2, label: "几何参数" },
],
},
{
name: "discContactOption",
label: "允许负接触力",
quantity: "dimensionless",
unit: "",
default: 1,
minimum: 1,
maximum: 2,
minimumExclusive: false,
editor: "choice",
options: [
{ value: 1, label: "允许负接触力" },
{ value: 2, label: "不允许负接触力" },
],
},
],
},
],
},
],