feat: add fmi 3.0 terminals and icons xml generation and extraction, … · modelscript/modelscript@92f261e · GitHub
Skip to content

Commit 92f261e

Browse files
committed
feat: add fmi 3.0 terminals and icons xml generation and extraction, fix fmi config typings
1 parent b6cbd97 commit 92f261e

6 files changed

Lines changed: 291 additions & 14 deletions

File tree

‎packages/core/src/compiler/modelica/flattener.ts‎

Lines changed: 124 additions & 1 deletion

‎packages/core/src/compiler/modelica/fmi3.ts‎

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -152,21 +152,21 @@ export interface Fmi3Options {
152152
/** Model identifier. */
153153
modelIdentifier: string;
154154
/** Description of the model. */
155-
description?: string;
155+
description?: string | undefined;
156156
/** Author name. */
157-
author?: string;
157+
author?: string | undefined;
158158
/** Generation tool name. */
159-
generationTool?: string;
159+
generationTool?: string | undefined;
160160
/** GUID (auto-generated if not provided). */
161-
guid?: string;
161+
guid?: string | undefined;
162162
/** Default experiment start time. */
163-
startTime?: number;
163+
startTime?: number | undefined;
164164
/** Default experiment stop time. */
165-
stopTime?: number;
165+
stopTime?: number | undefined;
166166
/** Default experiment step size. */
167-
stepSize?: number;
167+
stepSize?: number | undefined;
168168
/** FMU type flags. */
169-
fmuType?: Fmi3TypeFlags;
169+
fmuType?: Fmi3TypeFlags | undefined;
170170
}
171171

172172
/** Result of FMI 3.0 FMU generation. */
@@ -189,6 +189,8 @@ export interface Fmi3Result {
189189
numberOfEventIndicators: number;
190190
/** Terminals (from Modelica connectors). */
191191
terminals: Fmi3Terminal[];
192+
/** Terminals and Icons XML payload. */
193+
terminalsAndIconsXml?: string | null;
192194
}
193195

194196
// ── Main generator ──
@@ -281,6 +283,7 @@ export function generateFmi3(dae: ModelicaDAE, options: Fmi3Options, stateVars?:
281283
// ── Generate modelDescription.xml ──
282284
const fmuType = options.fmuType ?? { modelExchange: true, coSimulation: true };
283285
const nEventIndicators = countEventIndicators3(dae);
286+
const terminals = detectTerminals3(groupedVariables);
284287
const xml = generateModelDescriptionXml3(groupedVariables, {
285288
...options,
286289
guid,
@@ -293,7 +296,7 @@ export function generateFmi3(dae: ModelicaDAE, options: Fmi3Options, stateVars?:
293296
aliasMap,
294297
deps,
295298
enumTypes,
296-
terminals: detectTerminals3(groupedVariables),
299+
terminals,
297300
});
298301

299302
return {
@@ -308,7 +311,8 @@ export function generateFmi3(dae: ModelicaDAE, options: Fmi3Options, stateVars?:
308311
},
309312
guid,
310313
numberOfEventIndicators: nEventIndicators,
311-
terminals: detectTerminals3(groupedVariables),
314+
terminals,
315+
terminalsAndIconsXml: generateTerminalsAndIconsXml(terminals),
312316
};
313317
}
314318

‎packages/core/src/compiler/modelica/fmu-archive.ts‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { deflateRaw } from "pako";
2020
import type { ModelicaDAE } from "./dae.js";
2121
import type { FmuOptions, FmuResult } from "./fmi.js";
2222
import { generateFmu } from "./fmi.js";
23+
import { generateFmi3 } from "./fmi3.js";
2324
import { generateFmuCSources } from "./fmu-codegen.js";
2425
import type { ModelicaSimulator } from "./simulator.js";
2526

@@ -58,6 +59,7 @@ export function buildFmuArchive(
5859
): FmuArchiveResult {
5960
const stateVars = simulator?.stateVars ?? new Set<string>();
6061
const fmuResult = generateFmu(dae, options, stateVars);
62+
const fmi3Result = generateFmi3(dae, options, stateVars);
6163
const id = options.modelIdentifier;
6264

6365
const files = new Map<string, Uint8Array>();
@@ -66,6 +68,11 @@ export function buildFmuArchive(
6668
// ── modelDescription.xml ──
6769
files.set("modelDescription.xml", encoder.encode(fmuResult.modelDescriptionXml));
6870

71+
// ── terminalsAndIcons.xml (FMI 3.0) ──
72+
if (fmi3Result.terminalsAndIconsXml) {
73+
files.set("terminalsAndIcons/terminalsAndIcons.xml", encoder.encode(fmi3Result.terminalsAndIconsXml));
74+
}
75+
6976
// ── C source files ──
7077
if (options.includeSources !== false) {
7178
const sources = generateFmuCSources(dae, fmuResult, options);

‎packages/core/src/compiler/modelica/fmu-codegen.ts‎

Lines changed: 64 additions & 1 deletion

0 commit comments

Comments
 (0)