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 09: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

1
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

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

Finish / Dispose

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

Datumsangaben

1
2
3
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):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
'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