コード例 #1
0
ファイル: fmusim.py プロジェクト: manasdas17/fmupy
 def setValue(self, valueName, valueValue):
     ''' set the variable valueName to valueValue
         @param valueName: name of variable to be set
         @type valueName: string
         @param valueValue: new value
         @type valueValue: any type castable to the type of the variable valueName
     '''
     ScalarVariableReferenceVector = FMUInterface.createfmiReferenceVector(1)
     ScalarVariableReferenceVector[0] = self.description.scalarVariables[valueName].valueReference
     if self.description.scalarVariables[valueName].type.type == 'Real':
         ScalarVariableValueVector = FMUInterface.createfmiRealVector(1)
         ScalarVariableValueVector[0] = float(valueValue)
         self.fmiSetReal(ScalarVariableReferenceVector, ScalarVariableValueVector)
     elif self.description.scalarVariables[valueName].type.type in ['Integer', 'Enumeration']:
         ScalarVariableValueVector = FMUInterface.createfmiIntegerVector(1)
         ScalarVariableValueVector[0] = int(valueValue)
         self.fmiSetInteger(ScalarVariableReferenceVector, ScalarVariableValueVector)
     elif self.description.scalarVariables[valueName].type.type == 'Boolean':
         ScalarVariableValueVector = FMUInterface.createfmiBooleanVector(1)
         if valueValue == "true":
             ScalarVariableValueVector[0] = fmiTrue
         else:
             ScalarVariableValueVector[0] = fmiFalse
         self.fmiSetBoolean(ScalarVariableReferenceVector, ScalarVariableValueVector)
     elif self.description.scalarVariables[valueName].type.type == 'String':
         ScalarVariableValueVector = FMUInterface.createfmiStringVector(1)
         ScalarVariableValueVector[0] = str(valueValue)
         self.fmiSetString(ScalarVariableReferenceVector, ScalarVariableValueVector)
コード例 #2
0
        def prepareResultFile():
            # Prepare result file
            fmi = self.description
            (modelDescription, modelVariables, simpleTypes, units,
             enumerations) = MtsfFmi.convertFromFmi('', fmi)
            # Phase 1 of result file generation
            settings = self.integrationSettings
            experimentSetup = pyMtsf.ExperimentSetup(
                startTime=settings.startTime,
                stopTime=settings.stopTime,
                algorithm=settings.algorithmName,
                relativeTolerance=settings.errorToleranceRel,
                author=getpass.getuser(),
                description="",
                generationDateAndTime=time.strftime("%a, %d %b %Y %H:%M:%S",
                                                    time.gmtime()),
                generationTool="PySimulator",
                machine=os.getenv('COMPUTERNAME'),
                cpuTime="")
            modelVariables.allSeries[0].initialRows = 1  # Fixed
            modelVariables.allSeries[2].initialRows = 10  # Discrete
            if settings.gridPointsMode == 'NumberOf':
                nGridPoints = settings.gridPoints
            elif settings.gridPointsMode == 'Width':
                nGridPoints = 1 + int(
                    (settings.stopTime - settings.startTime) /
                    settings.gridWidth)
            else:
                nGridPoints = 1
            modelVariables.allSeries[1].initialRows = max(
                nGridPoints,
                modelVariables.allSeries[2].initialRows)  # Continuous

            # Create result object
            mtsf = Mtsf.Results(settings.resultFileName, modelDescription,
                                modelVariables, experimentSetup, simpleTypes,
                                units, enumerations)
            if not mtsf.isAvailable:
                print("Result file " + settings.resultFileName +
                      " cannot be opened for write access.\n")
                self.integrationResults = Plugins.SimulationResult.IntegrationResults.Results(
                )
                return False

            # Create fmi reference lists in categories
            for series in mtsf._mtsf.results.series.values():
                for category in series.category.values():
                    category.references = FMUInterface.createfmiReferenceVector(
                        category.nColumn)
                    category.iReferences = -1
                    dataType = pyMtsf.CategoryReverseMapping[category.name]
                    if dataType == 'Real':
                        category.fmiGetValues = self.interface.fmiGetReal
                    elif dataType == 'Integer':
                        category.fmiGetValues = self.interface.fmiGetInteger
                    elif dataType == 'Boolean':
                        category.fmiGetValues = self.interface.fmiGetBoolean
                    elif dataType == 'String':
                        category.fmiGetValues = self.interface.fmiGetString
            for name, variable in modelVariables.variable.items():
                if variable.aliasName is None:
                    variable.category.iReferences += 1
                    if name in fmi.scalarVariables:
                        # print variable.seriesIndex, variable.category.name, name, variable.category.iReferences, len(variable.category.references)
                        variable.category.references[
                            variable.category.
                            iReferences] = fmi.scalarVariables[
                                name].valueReference
                    else:
                        # e.g. for time variables, that do not exist in fmi-world
                        series = variable.category.series
                        series.independentVariableCategory = variable.category
                        variable.category.independentVariableColumn = variable.columnIndex
                        variable.category.references[
                            variable.category.iReferences] = 0

            for series in mtsf._mtsf.results.series.values():
                if hasattr(series, 'independentVariableCategory'):
                    category = series.independentVariableCategory
                    column = category.independentVariableColumn
                    if column > 0:
                        dummy = 0
                    else:
                        dummy = 1
                    if category.references.shape[0] > dummy:
                        category.references[column] = category.references[
                            dummy]
                    else:
                        category.references = numpy.array([])
                else:
                    series.independentVariableCategory = None
            self.integrationResults = mtsf
            return True
コード例 #3
0
    def getValue(self, name):
        ''' Returns the values of the variables given in name;
            name is either a String or a list of Strings.
        '''
        if types.TypeType(name) == types.ListType:
            n = len(name)
            nameList = True
            names = name
        else:
            n = 1
            nameList = False
            names = [name]

        iReal = []
        iInteger = []
        iBoolean = []
        iString = []
        refReal = []
        refInteger = []
        refBoolean = []
        refString = []
        for i, x in enumerate(names):
            dataType = self.description.scalarVariables[x].type.type
            if dataType == 'Real':
                refReal.append(
                    self.description.scalarVariables[x].valueReference)
                iReal.append(i)
            elif dataType == 'Integer':
                refInteger.append(
                    self.description.scalarVariables[x].valueReference)
                iInteger.append(i)
            elif dataType == 'Boolean':
                refBoolean.append(
                    self.description.scalarVariables[x].valueReference)
                iBoolean.append(i)
            elif dataType == 'String':
                refString.append(
                    self.description.scalarVariables[x].valueReference)
                iString.append(i)

        retValue = range(n)
        k = len(refReal)
        if k > 0:
            ref = FMUInterface.createfmiReferenceVector(k)
            for i in xrange(k):
                ref[i] = refReal[i]
            values = self.interface.fmiGetReal(ref)
            for i in xrange(k):
                retValue[iReal[i]] = values[i]
        k = len(refInteger)
        if k > 0:
            ref = FMUInterface.createfmiReferenceVector(k)
            for i in xrange(k):
                ref[i] = refInteger[i]
            values = self.interface.fmiGetInteger(ref)
            for i in xrange(k):
                retValue[iInteger[i]] = values[i]
        k = len(refBoolean)
        if k > 0:
            ref = FMUInterface.createfmiReferenceVector(k)
            for i in xrange(k):
                ref[i] = refBoolean[i]
            values = self.interface.fmiGetBoolean(ref)
            for i in xrange(k):
                retValue[iBoolean[i]] = values[i]
        k = len(refString)
        if k > 0:
            ref = FMUInterface.createfmiReferenceVector(k)
            for i in xrange(k):
                ref[i] = refString[i]
            values = self.interface.fmiGetString(ref)
            for i in xrange(k):
                retValue[iString[i]] = values[i]

        if nameList:
            return retValue
        else:
            return retValue[0]
コード例 #4
0
ファイル: fmusim.py プロジェクト: yeus/fmupy
  def getValue(self, name):
      ''' Returns the values of the variables given in name;
          name is either a String or a list of Strings.            
      '''
      if type(name) == list:
          n = len(name)
          nameList = True
          names = name
      else:
          n = 1
          nameList = False
          names = [name]

      iReal = []
      iInteger = []
      iBoolean = []
      iString = []
      refReal = []
      refInteger = []
      refBoolean = []
      refString = []
      for i, x in enumerate(names):
          dataType = self.description.scalarVariables[x].type.type
          if dataType == 'Real':
              refReal.append(self.description.scalarVariables[x].valueReference)
              iReal.append(i)
          elif dataType == 'Integer':
              refInteger.append(self.description.scalarVariables[x].valueReference)
              iInteger.append(i)
          elif dataType == 'Boolean':
              refBoolean.append(self.description.scalarVariables[x].valueReference)
              iBoolean.append(i)
          elif dataType == 'String':
              refString.append(self.description.scalarVariables[x].valueReference)
              iString.append(i)

      #TODO: hier werden Werte für bestimmte Variablen abgerufen.
      retValue = list(range(n))
      k = len(refReal)
      if k > 0:
          ref = FMUInterface.createfmiReferenceVector(k)
          for i in range(k):
              ref[i] = refReal[i]
          values = self.fmiGetReal(ref)
          for i in range(k):
              retValue[iReal[i]] = values[i]
      k = len(refInteger)
      if k > 0:
          ref = FMUInterface.createfmiReferenceVector(k)
          for i in range(k):
              ref[i] = refInteger[i]
          values = self.fmiGetInteger(ref)
          for i in range(k):
              retValue[iInteger[i]] = values[i]
      k = len(refBoolean)
      if k > 0:
          ref = FMUInterface.createfmiReferenceVector(k)
          for i in range(k):
              ref[i] = refBoolean[i]
          values = self.fmiGetBoolean(ref)
          for i in range(k):
              retValue[iBoolean[i]] = values[i]
      k = len(refString)
      if k > 0:
          ref = FMUInterface.createfmiReferenceVector(k)
          for i in range(k):
              ref[i] = refString[i]
          values = self.fmiGetString(ref)
          for i in range(k):
              retValue[iString[i]] = values[i]

      if nameList:
          return retValue
      else:
          return retValue[0]
コード例 #5
0
ファイル: FMUSimulator.py プロジェクト: DLR-SR/PySimulator
        def prepareResultFile():
            # Prepare result file
            fmi = self.description
            (modelDescription, modelVariables, simpleTypes, units, enumerations) = MtsfFmi.convertFromFmi('', fmi)
            # Phase 1 of result file generation
            settings = self.integrationSettings
            experimentSetup = pyMtsf.ExperimentSetup(startTime=settings.startTime, stopTime=settings.stopTime,
                                                     algorithm=settings.algorithmName, relativeTolerance=settings.errorToleranceRel,
                                                     author=getpass.getuser(), description="",
                                                     generationDateAndTime=time.strftime("%a, %d %b %Y %H:%M:%S", time.gmtime()),
                                                     generationTool="PySimulator", machine=os.getenv('COMPUTERNAME'),
                                                     cpuTime="")
            modelVariables.allSeries[0].initialRows = 1  # Fixed
            modelVariables.allSeries[2].initialRows = 10  # Discrete
            if settings.gridPointsMode == 'NumberOf':
                nGridPoints = settings.gridPoints
            elif settings.gridPointsMode == 'Width':
                nGridPoints = 1 + int((settings.stopTime - settings.startTime) / settings.gridWidth)
            else:
                nGridPoints = 1
            modelVariables.allSeries[1].initialRows = max(nGridPoints, modelVariables.allSeries[2].initialRows)  # Continuous

            # Create result object
            mtsf = Mtsf.Results(settings.resultFileName,
                               modelDescription, modelVariables, experimentSetup, simpleTypes, units, enumerations)
            if not mtsf.isAvailable:
                print("Result file " + settings.resultFileName + " cannot be opened for write access.\n")
                self.integrationResults = Plugins.SimulationResult.IntegrationResults.Results()
                return False

            # Create fmi reference lists in categories
            for series in mtsf._mtsf.results.series.values():
                for category in series.category.values():
                    category.references = FMUInterface.createfmiReferenceVector(category.nColumn)
                    category.iReferences = -1
                    dataType = pyMtsf.CategoryReverseMapping[category.name]
                    if dataType == 'Real':
                        category.fmiGetValues = self.interface.fmiGetReal
                    elif dataType == 'Integer':
                        category.fmiGetValues = self.interface.fmiGetInteger
                    elif dataType == 'Boolean':
                        category.fmiGetValues = self.interface.fmiGetBoolean
                    elif dataType == 'String':
                        category.fmiGetValues = self.interface.fmiGetString
            for name, variable in modelVariables.variable.items():
                if variable.aliasName is None:
                    variable.category.iReferences += 1
                    if name in fmi.scalarVariables:
                        # print variable.seriesIndex, variable.category.name, name, variable.category.iReferences, len(variable.category.references)
                        variable.category.references[variable.category.iReferences] = fmi.scalarVariables[name].valueReference
                    else:
                        # e.g. for time variables, that do not exist in fmi-world
                        series = variable.category.series
                        series.independentVariableCategory = variable.category
                        variable.category.independentVariableColumn = variable.columnIndex
                        variable.category.references[variable.category.iReferences] = 0

            for series in mtsf._mtsf.results.series.values():
                if hasattr(series, 'independentVariableCategory'):
                    category = series.independentVariableCategory
                    column = category.independentVariableColumn
                    if column > 0:
                        dummy = 0
                    else:
                        dummy = 1
                    if category.references.shape[0] > dummy:
                        category.references[column] = category.references[dummy]
                    else:
                        category.references = numpy.array([])
                else:
                    series.independentVariableCategory = None
            self.integrationResults = mtsf
            return True