2017-09-20 15 views
1

저는 몇 달 전에 시작한 Modelica를 처음 접했습니다. MultiBody 라이브러리를 사용하여 표준 Modelica 배포에 포함 된 다중 바디 기계 시스템에서 주로 작업합니다.Modelica MultiBody Library의 몸체 위치 좌표의 동적 변경

시뮬레이션 중에 동적으로 계산 된 좌표에 따라 본문 위치를 변경해야하지만 그렇게 할 방법을 찾을 수 없습니다.

이 주어진 시스템의 질량 중심의 위치를 ​​계산하는 벡터 변수 :

Modelica.SIunits.Length CMG[2]; 

CMG[1] = ... + cos(part3rotation.angles[3]) ... + part3origin[1] ...; 
CMG[2] = ...; 

I의 좌표에 질량이 본체 (FixedShape)를 배치하고 싶은 (CMG [1] CMG [2])를 사용하여 시뮬레이션 중에 질량 중심과 그 움직임을 표시합니다.

이렇게 할 방법이 있습니까?

본문을 고정 된 번역 구성 요소에 연결하려고했지만 변수 (VAR) 대신 매개 변수 (PARAM)가 필요하며 이로 인해 오류가 발생합니다.

사용 된 소프트웨어 : Modelica 3.2.2 및 Wolfram SystemModeler 5.0.

답변

0

이 솔루션은 새로운 입력을 포함하도록 FixedTranslation 클래스를 수정했다 장난.

1

내가 (FixedTranslation에서 가져온) 다음 식을 추가 한 후 몸에 프레임 Modelica.Mechanics.MultiBody.Interfaces.Frame_b을 추가 한 것 :

frame_b.r_0 = your_three_d_vector; 
frame_b.R = frame_a.R; // or some other orientation 

/* Force and torque balance */ 
zeros(3) = frame_a.f + frame_b.f; // and maybe some other forces in your system 
zeros(3) = frame_a.t + frame_b.t + cross(r, frame_b.f); // and maybe some other torques and forces in your system 

을 Modelica의 추가 커넥터를 추가하기 위해, 우리는뿐만 아니라 고려하는 것 잠재 변수 (이 경우, 위치와 방향)뿐만 아니라 흐름 변수 (힘과 토크). 클래스의 XYZ 벡터에 CMG 벡터를 연결

frame_b.r_0 = frame_a.r_0 + xyz; 

을했다 : 방정식을

input Modelica.SIunits.Position xyz[3]; 

수정 :

0

전체 질량 중심의 위치를 ​​관성 시스템과 비교하여 시스템에서 계산한다고 가정합니다. 그런 다음 클래스에서 frame_a을 완전히 생략 할 수 있으므로 에 명시 적으로 frame_a을 연결할 필요가 없습니다. 이는 분명히 더 이상 사용되지 않습니다.

원래 FixedTranslation에 정의 된 Connections.branch(frame_a.R, frame_b.R) 대신 Connections.root(frame_b.R)을 사용해야합니다.

그리고 한 번 더 의견. 위치 벡터 구성 요소 대신 벡터로 직접 작업하고 벡터 변환에 Modelica.Mechanics.MultiBody.Frames의 함수를 사용하는 것이 좋습니다.