BlueM.DLLAdapter: Difference between revisions

From BlueM
Jump to navigation Jump to search
mNo edit summary
m (fix syntax highlighting)
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''BlueM.DLLAdapter''' ist ein .NET Wrapper zum Ansprechen des [[BlueM.Sim]] Rechenkerns in DLL-Form.
==Schnittstellendefinitionen==
==Schnittstellendefinitionen==
Nachfolgend werden die Schnittstellen-Methoden zur Kommunikation mit der BlueM DLL mit den zugehörigen Übergabe- bzw. Rückgabeparametern aufgelistet.
[[Bild:BlueM DLL Wrapper.png|thumb|Klassendiagramm]]
Nachfolgend werden die Schnittstellen-Methoden zur Kommunikation mit der BlueM.Sim DLL mit den zugehörigen Übergabe- bzw. Rückgabeparametern aufgelistet.


Falls ein Fehler auftritt wird die Methode "CreateAndThrowException" aufgerufen (schmeisst einen Fehler).
Falls ein Fehler auftritt wird die Methode <code>CreateAndThrowException</code> aufgerufen (schmeisst einen Fehler).
* Basismethoden
===Basismethoden===
:* Initialize
'''Initialize'''
:<csharp>public void Initialize(string filePath)</csharp>
<source lang="csharp">public void Initialize(string filePath)</source>
:"filePath" ist der Absolute Pfad mit dem Projektnamen ohne die Dateiendung .ALL (Bsp. "d:\Simulation\TSIM").
:<code>filePath</code> ist der Absolute Pfad mit dem Projektnamen ohne die Dateiendung <code>.ALL</code> (Bsp.: <code>"D:\Simulation\TSIM"</code>).
:Das System wird initialisiert und alle zugehörigen Daten aus den Simulationsdateien geladen.  
:Das System wird initialisiert und alle zugehörigen Daten aus den Simulationsdateien geladen.  
:* PerformTimeStep
 
:<csharp>public void PerformTimeStep()</csharp>
'''PerformTimeStep'''
<source lang="csharp">public void PerformTimeStep()</source>
:Berechnet den nächsten Zeitschritt.
:Berechnet den nächsten Zeitschritt.
:* Finish / Dispose
:<csharp> public void Finish()</csharp>
:<csharp> public void Dispose()</csharp>
:Schliessen alle Dateien und freigabe des Speichers
* Auszuge aus dem Quellcode
<csharp>
namespace IHWB.OpenMI.BlueM
{
    public class BlueM_EngineDotNetAccess
    {
        #region Basisfunktionen
        public void Initialize(string filePath)
        public void Finish()
        public void Dispose()
       
        public void PerformTimeStep()
        #endregion
        #region ModelInfo
        public string GetModelDescription()
        public string GetModelID()
        #endregion
        #region Exchangeobjekte


        public int GetNumberOfNodes()
'''Finish / Dispose'''
<source lang="csharp">
public void Finish()
public void Dispose()
</source>
:Schliessen aller Dateien und Freigabe des Speichers


        public string GetNodeKennung(int NodeID)
'''Datumsangaben'''
<source lang="csharp">
public DateTime GetCurrentTime()
public DateTime GetSimulationStartDate()
public DateTime GetSimulationEndDate()
</source>
:Was sind die Simulationszeiten (Anfang und Ende). Wo befinden wir uns gerade (GetCurrentTime) - wird nach jedem PerformTimeStep wietergeschoben.


        public double GetYCoordinate(int NodeID)
==Anwendungsbeispiel==
Beispiel zur Nutzung des Bluem.DLLAdapters zur Simulation mittels BlueM.dll in VB.NET (Anwendung nur mit einer Simulation - ''SingleDLL''):
<source lang="vbnet">
'Einmal zu Beginn instanzieren
bluem_dll = New BlueM_EngineDotNetAccess("Pfad-zu-BlueM.dll")


        public double GetXCoordinate(int NodeID)
...


        #endregion
Try


        #region Zeit_methoden
    Call bluem_dll.Initialize("Pfad-zu-Datensatz")


        public int GetTimeStepLength()
    Dim SimEnde As DateTime = BlueM_EngineDotNetAccess.DateTime(bluem_dll.GetSimulationEndDate())


        public string GetCurrentTime()
    'Schleife über Simulationszeitraum
          
    Do While (BlueM_EngineDotNetAccess.DateTime(bluem_dll.GetCurrentTime) <= SimEnde)
        public string GetSimulationStartDate()
         Call bluem_dll.PerformTimeStep()
    Loop


        public string GetSimulationEndDate()
    'Simulation abschliessen
    Call bluem_dll.Finish()


        #endregion
    'Simulation abgeschlossen
    MsgBox("Simulation erfolgreich!", MsgBoxStyle.Information, "BlueM")


        #region Get_SET_VALUES
    simOK = True


        public double Get_Qab(int index)
Catch ex As Exception


        public void Set_Qzu(int index, double inflow)
    'Simulationsfehler aufgetreten
    MsgBox(ex.Message, MsgBoxStyle.Exclamation, "BlueM")


        #endregion
    'Simulation abschliessen
    Call bluem_dll.Finish()


        #region Private_methoden
    simOK = False


        private void CreateAndThrowException()
Finally
        {
            int numberOfMessages = 0;
            numberOfMessages = mBlueM_DLLMethoden.GetNumberOfMessages();
            string message = "Error Message from BlueM Fortran Core ";


            for (int i = 0; i < numberOfMessages; i++)
    'Ressourcen deallokieren
            {
    Call bluem_dll.Dispose()
                int n = i+1; // Fortran zählt ab 1 (nicht 0)
                StringBuilder messageFromCore = new StringBuilder("                                                        ");
                mBlueM_DLLMethoden.GetMessage(ref n, messageFromCore, (uint)messageFromCore.Length);
                message += "; ";
                message += messageFromCore.ToString().Trim();
            }
            throw new Exception(message);
        }
        #endregion


    }
End Try
}
</source>
</csharp>


[[Kategorie:BlueM Code]]
[[Kategorie:BlueM.Sim Development]]

Latest revision as of 08:19, 27 January 2018

BlueM.DLLAdapter ist ein .NET Wrapper zum Ansprechen des BlueM.Sim Rechenkerns in DLL-Form.

Schnittstellendefinitionen

Klassendiagramm

Nachfolgend werden die Schnittstellen-Methoden zur Kommunikation mit der BlueM.Sim DLL mit den zugehörigen Übergabe- bzw. Rückgabeparametern aufgelistet.

Falls ein Fehler auftritt wird die Methode CreateAndThrowException aufgerufen (schmeisst einen Fehler).

Basismethoden

Initialize

public void Initialize(string filePath)
filePath ist der Absolute Pfad mit dem Projektnamen ohne die Dateiendung .ALL (Bsp.: "D:\Simulation\TSIM").
Das System wird initialisiert und alle zugehörigen Daten aus den Simulationsdateien geladen.

PerformTimeStep

public void PerformTimeStep()
Berechnet den nächsten Zeitschritt.

Finish / Dispose

 public void Finish()
 public void Dispose()
Schliessen aller Dateien und Freigabe des Speichers

Datumsangaben

 public DateTime GetCurrentTime()
 public DateTime GetSimulationStartDate()
 public DateTime GetSimulationEndDate()
Was sind die Simulationszeiten (Anfang und Ende). Wo befinden wir uns gerade (GetCurrentTime) - wird nach jedem PerformTimeStep wietergeschoben.

Anwendungsbeispiel

Beispiel zur Nutzung des Bluem.DLLAdapters zur Simulation mittels BlueM.dll in VB.NET (Anwendung nur mit einer Simulation - SingleDLL):

'Einmal zu Beginn instanzieren
bluem_dll = New BlueM_EngineDotNetAccess("Pfad-zu-BlueM.dll")

...

Try

    Call bluem_dll.Initialize("Pfad-zu-Datensatz")

    Dim SimEnde As DateTime = BlueM_EngineDotNetAccess.DateTime(bluem_dll.GetSimulationEndDate())

    'Schleife über Simulationszeitraum 
    Do While (BlueM_EngineDotNetAccess.DateTime(bluem_dll.GetCurrentTime) <= SimEnde)
        Call bluem_dll.PerformTimeStep()
    Loop

    'Simulation abschliessen
    Call bluem_dll.Finish()

    'Simulation abgeschlossen
    MsgBox("Simulation erfolgreich!", MsgBoxStyle.Information, "BlueM")

    simOK = True

Catch ex As Exception

    'Simulationsfehler aufgetreten
    MsgBox(ex.Message, MsgBoxStyle.Exclamation, "BlueM")

    'Simulation abschliessen
    Call bluem_dll.Finish()

    simOK = False

Finally

    'Ressourcen deallokieren
    Call bluem_dll.Dispose()

End Try