| |
| import os |
| import sys |
| import OMSimulator |
| import pandas as pd |
| import numpy as np |
| from ipywidgets import interact, interactive, fixed, interact_manual |
| import ipywidgets as widgets |
| from IPython.display import display |
| |
| |
| loadModule("FMI Module") |
| loadModule("/System/Resources") |
| |
| include("platform:/plugin/org.eclipse.papyrus.ease/scripts/python/papyrusutils.py") |
| |
| |
| def _instantiateArchitecture(omSimulator, papyrusSimulatorArchi): |
| modelIdentifier = papyrusSimulatorArchi.getName() |
| omSimulator.newFMIModel(modelIdentifier) |
| for instance in papyrusSimulatorArchi.getInstances(): |
| omSimulator.addFMU(modelIdentifier,instance.getFMUPath(), instance.getName() ) |
| |
| for connector in papyrusSimulatorArchi.getConnectors() : |
| print(connector.getSourcePort().getFullName(), connector.getTargetPort().getFullName()) |
| omSimulator.addConnection(modelIdentifier, connector.getSourcePort().getFullName(), connector.getTargetPort().getFullName()) |
| |
| |
| def instantiateArchitecture(omSimulator, papyrusSimulatorArchi) : |
| |
| papyrun(_instantiateArchitecture, omSimulator, papyrusSimulatorArchi) |
| |
| |
| |
| |
| def initOMSimulator(papyrusModelPath, simulatorQualifiedName) : |
| |
| papyrusFile = getFile(papyrusModelPath) |
| |
| owningFolder = papyrusFile.getParent().getLocation().makeAbsolute().toOSString() |
| defaultResultFile = os.path.join(owningFolder,"simResult.csv") |
| |
| context = getPapyrusNamedElement(papyrusModelPath, simulatorQualifiedName) |
| papyrusSimulatorArchi = getSimulatorHandler(context) |
| identifier = papyrusSimulatorArchi.getName() |
| omSimulator = OMSimulator.OMSimulator() |
| instantiateArchitecture(omSimulator, papyrusSimulatorArchi) |
| |
| return omSimulator, identifier, defaultResultFile |
| |
| |
| |
| def runOMSimulator(omSimulator, identifier, dt, tEnd, resultFile): |
| omSimulator.setCommunicationInterval(identifier, dt) |
| omSimulator.setResultFile(identifier, resultFile) |
| omSimulator.setStopTime(identifier, tEnd) |
| |
| omSimulator.initialize(identifier) |
| omSimulator.simulate(identifier) |
| omSimulator.unloadModel(identifier) |
| |
| result = pd.read_csv(resultFile, skiprows=1, memory_map=True, skipinitialspace=True ) |
| return result |
| |
| |
| |
| def initAndRunOMSimulator(papyrusModelPath,simulatorQualifiedName,dt, tEnd, resultFileName="simResult.csv"): |
| simulator,identifier, resultFile = initOMSimulator(papyrusFile, simulatorQualifiedName) |
| resultFile = os.path.join(os.path.dirname(resultFile), resultFileName) |
| result = runOMSimulator(simulator, identifier, dt, tEnd, resultFile) |
| return result |
| |
| |
| def interactiveRunSimulator(papyrusModelPath, simulatorQualifiedName,dt, tEnd, resultFileName="simResult.csv" ): |
| dtSlider =interactive.widget_from_abbrev(dt) |
| dtSlider.readout_format='.3f' |
| |
| widget = interactive(initAndRunOMSimulator,{"manual":True, "auto_display":False}, papyrusModelPath=fixed(papyrusFile), simulatorQualifiedName=fixed(simulatorQualifiedName),dt=dtSlider, tEnd=tEnd, resultFileName=resultFileName) |
| display(widget) |
| return widget |
| |
| |