blob: 6ec32722cc9ce447a0fc3f88c6bd9742d760b69b [file] [log] [blame]
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