Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme beim Knotenlast erstellen unter .NET

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme beim Knotenlast erstellen unter .NET

    Hallo,

    ich habe ein Problem beim setzen von Lasten über .Net. Könnte mir jemand einen Code-Schnipsel einstellen, das funktioniert. Ich habe keine Ahnung woran das liegen könnte.

    Vielen Dank schon einmal für eure Hilfe!

    Meiner sieht folgender Maßen aus und gibt mir immer den Fehler:
    Ausnahmefehler des Servers. (Ausnahme von HRESULT: 0x80010105 (RPC_E_SERVERFAULT))

    Hier der Code:
    // Connect to R-Stab
    RSTAB6.IrsApplication RSApp = null; // The R-Stab Application
    RSTAB6.IrsStructure RSStr = null; // The R-Stab Structure
    RSTAB6.IrsLoads RSLoads = null; // The R-Stab Loads
    RSTAB6.IrsStructuralData RSTopo = null; // The R-Stab Structural Data

    RSStr = new RSTAB6.Structure();

    RSApp = RSStr.rsGetApplication();

    RSApp.rsLockLicence();
    RSLoads = RSStr.rsGetLoads();
    RSTopo = RSStr.rsGetStructuralData();

    RSTopo.rsPrepareModification();
    RSTopo.rsSetNodeArr(_nodes.Length, _nodes);
    RSTopo.rsFinishModification();

    // Create Load Case
    RS_LOAD_CASE loadCase = new RS_LOAD_CASE();
    loadCase.iNo = 1;
    loadCase.strDescription = "OwnWeight_RhinoPlug";
    loadCase.fLCFactor = (float)1.2;
    loadCase.type = RS_LOAD_CASE_TYPE.LCT_PERMANENT;
    loadCase.bSWRespect = 1;
    loadCase.ptSWFactor.x = 1;
    loadCase.ptSWFactor.y = 2;
    loadCase.ptSWFactor.z = 3;
    loadCase.analysis.method = RS_CALC_METHOD.METHOD_1ST_ORDER;
    loadCase.analysis.bTension = -1;
    loadCase.analysis.bDividing = -1;
    loadCase.analysis.bGammaM = 1;
    loadCase.strComment = "ls1";

    // Create Load
    RS_LOAD_NODE PointLoad = new RS_LOAD_NODE();
    PointLoad.iNo = 1;
    PointLoad.strNodeList = "1";
    PointLoad.force.x = 1;
    PointLoad.force.y = 2;
    PointLoad.force.z = 3;
    PointLoad.moment.x = 4;
    PointLoad.moment.y = 5;
    PointLoad.moment.z = 6;
    PointLoad.strComment = "Nodal load 1";

    // Create Arrays
    RS_LOAD_NODE[] PointLoads = new RS_LOAD_NODE[1];
    RS_LOAD_CASE[] loadCases = new RS_LOAD_CASE[1];
    PointLoads[0] = PointLoad;
    loadCases[0] = loadCase;

    // Prepare Modification
    RSLoads.rsPrepareModification();

    //Write new Load Case
    RSLoads.rsSetLoadCaseArr(loadCases.Length, loadCases);

    // Get New Load Case Back again
    RSTAB6.IrsLoadCase RSLoad = RSLoads.rsGetLoadCase(0,RSTAB6.ITEM_AT.AT_INDEX);

    // Set Nodal Loads - HIER IST DER FEHLER
    RSLoad.rsSetNodeArr(PointLoads.Length, PointLoads);


    RSLoads.rsFinishModification();

    RSApp.rsShowApplication();

  • #2
    AW: Probleme beim Knotenlast erstellen unter .NET

    Hallo,

    ich bin gerade auf diesen Thread gestoßen, da ich beim Setzen von Stablasten über .net genau den gleichen Fehler erhalte. Habe schon einiges ausprobiert, aber keine Lösung gefunden. Der Fehler mutet auch etwas seltsam an, da RSTAB ja normalerweise in den Fehlermeldungen recht klar sagt, was ihm nicht passt... würde mich also auch sehr über Hinweise und Lösungsmöglichkeiten freuen!

    Hanno

    Kommentar


    • #3
      AW: Probleme beim Knotenlast erstellen unter .NET

      Hallo Hanno,
      Freut mich zu hören, dass ich nicht der einzige bin, dem solche Fehler passieren :-)

      Hilft aber nichts.

      Würde mich mal interessieren ob das am Code liegt oder an irgendwelchen Systemeinstellungen.

      Laut Fehlercode und google hat das irgend etwas mit der Verbindung zwischen .Net und R-Stab zu tun. Aber ich bin Architekt und kein Informatiker - ganz verstanden habe ich das nicht.

      Ich bin gerade dabei einen Workarround zu basteln, indem ich ein Excel Makro von Visual Studio aus fernsteuere. (Bin nämlich etwas unter Zeitdruck).Klappt auch schon ganz gut, ist aber alles andere als elegant (und richtig nervig was das debuggen betrifft)

      Klappen bei dir die Knotenlasten oder tritt der Fehler nur bei Stablasten auf. Ich habe es noch nicht ausprobiert.

      Wenn ich fertig bin, kann ich meinen Workarround hier einstellen, wenn es dir hilft.

      Viele Grüße
      Martin

      Kommentar


      • #4
        AW: Probleme beim Knotenlast erstellen unter .NET

        Hallo zusammen,

        ich habe das jetzt probiert - mit Visual Basic .Net und Visual Studio 2008. Es scheint alles zu funktionieren.

        Einige Hinweise:
        - Wenn man mit .Net arbeitet, dann ist als Referenz auf

        C:\Programme\Dlubal\RSTAB6\.NET\RSTAB6.interop.dll

        zu setzen und nicht auf RSTAB6.tlb wie bei Visual Basic. Gleiches gilt für STAHL, RFEM etc. Das könnte schon die Lösung der genannten Probleme sein.

        - Weiter muss das .Net Framework installiert sein (eigentlich klar)

        Ich habe dann folgenden Code verwendet, der fast identisch auch in den downloadbaren xls file für RSTAB6 mit den Beispielsmakros zu finden ist (http://www.dlubal.de/download/rs6com.zip). Man muss diesen eben ein wenig auf die Syntax von VB.Net anpassen. Gleiches gilt für C#.

        ##### zunächst Knotenlasten, dann Stablasten

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim RSPos As RSTAB6.Structure
        Dim RSLoads As RSTAB6.IrsLoads
        Dim RSLoad As RSTAB6.IrsLoadCase

        On Error GoTo e

        RSPos = GetObject(, "RSTAB6.Structure")
        RSPos.rsGetApplication.rsLockLicence()
        RSLoads = RSPos.rsGetLoads
        RSLoad = RSLoads.rsGetLoadCase(0, RSTAB6.ITEM_AT.AT_INDEX)


        Dim data(2) As RSTAB6.RS_LOAD_NODE

        ' Knotenlasten
        data(0).iNo = 1
        data(0).strNodeList = "1-2"
        data(0).force.x = 1000
        data(0).force.y = 2000
        data(0).force.z = 3000
        data(0).moment.x = 4000
        data(0).moment.y = 5000
        data(0).moment.z = 6000
        data(0).strComment = "Nodal load 1"

        data(1).iNo = 2
        data(1).strNodeList = "3-4"
        data(1).force.x = 11000
        data(1).force.y = 22000
        data(1).force.z = 33000
        data(1).moment.x = 44000
        data(1).moment.y = 55000
        data(1).moment.z = 66000
        data(1).strComment = "Nodal load 2"

        RSLoad.rsPrepareModification()

        RSLoad.rsSetNodeArr(2, data)

        e:
        RSLoad.rsFinishModification()
        If Err.Number <> 0 Then MsgBox(Err.Description, , Err.Source)

        RSPos.rsGetApplication.rsUnlockLicence()
        End Sub



        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim RSPos As RSTAB6.Structure
        Dim RSLoads As RSTAB6.IrsLoads
        Dim RSLoad As RSTAB6.IrsLoadCase

        On Error GoTo e

        RSPos = GetObject(, "RSTAB6.Structure")
        RSPos.rsGetApplication.rsLockLicence()
        RSLoads = RSPos.rsGetLoads
        RSLoad = RSLoads.rsGetLoadCase(0, RSTAB6.ITEM_AT.AT_INDEX)

        ' Stablasten
        Dim data(2) As RSTAB6.RS_LOAD_MEMBER

        data(0).iNo = 1
        data(0).referenceType = RSTAB6.RS_LOAD_REFERENCE_TYPE.LRT_MEMBERS
        data(0).strObjectsList = "1-2"
        data(0).type = RSTAB6.RS_LOAD_MEMBER_TYPE.LMT_FORCE
        data(0).direction = RSTAB6.RS_LOAD_DIRECTION.LD_LOCAL_Z
        data(0).referenceLength = RSTAB6.RS_LOAD_REFERENCE_LENGTH.LRL_TRUE_MEMBER

        data(0).distribution = RSTAB6.RS_LOAD_DISTRIBUTION.LD_TRAPEZ

        ' Concentrated - depends on data(0).distribution
        data(0).distConcentrated.fP1 = 11
        data(0).distConcentrated.fP2 = 22
        data(0).distConcentrated.fA = 1
        data(0).distConcentrated.fB = 2
        data(0).distConcentrated.bRelative = True

        ' Uniform - depends on data(0).distribution
        data(0).distUniform.fP1 = 33

        ' Trapez - depends on data(0).distribution
        data(0).distTrapez.fP1 = 10000
        data(0).distTrapez.fP2 = 20000
        data(0).distTrapez.fA = 0
        data(0).distTrapez.fB = 100
        data(0).distTrapez.bRelative = True
        data(0).distTrapez.bTotalLength = False

        ' Tapered
        data(0).distTapered.fP1 = 66
        data(0).distTapered.fP2 = 77
        data(0).distTapered.fA = 6
        data(0).distTapered.fB = 7
        data(0).distTapered.bRelative = True

        ' Parabolic
        data(0).distParabolic.fP1 = 88
        data(0).distParabolic.fP2 = 99
        data(0).distParabolic.fP3 = 111

        data(0).fH = 10
        data(0).strComment = "Member load 1"

        RSLoad.rsPrepareModification()

        RSLoad.rsSetMemberArr(1, data)

        e:
        RSLoad.rsFinishModification()
        If Err.Number <> 0 Then MsgBox(Err.Description, , Err.Source)

        RSPos.rsGetApplication.rsUnlockLicence()

        End Sub
        End Class


        Wichtig ist, dass eine RSTAB6 Datei offen ist und dort auch der betreffende Knoten, Stab und Lastfall vorhanden ist, auf die im Code verwiesen wird.

        Ich hoffe, damit kommen Sie einen Schritt weiter.

        Viele Gr&#252;&#223;e
        Walter Rustler
        Ing.-Software Dlubal

        Kommentar

        Lädt...
        X