2013-03-05 7 views
2

M 파일에서 시뮬 링크를 제어하려고합니다. M 파일에서 수행하고자하는 작업은 시뮬링크 모델에 입력을 제공하고 시뮬 링크 모델을 실행하고 0.6 초에 한 입력 값을 변경 한 다음 새 입력으로 시뮬 링크 모델을 계속 실행합니다.M 파일에서 시뮬 링크를 제어

나는 set_param을 사용하여 시뮬 링크를 시작, 일시 중지 및 계속할 수 있음을 이미 알고 있지만 문제는 시뮬링크 모델을 특정 시간 (0.6 초)에 일시 중지하는 방법을 모른다는 것입니다. 시뮬 링크 모델에서 현재 시간을 가져 와서 M 파일에서 읽으시겠습니까?

또 다른 방법은 sim을 사용하여 simulink 모델을 0에서 0.6s로 실행하고 SimState를 사용하여 0.6s에서 정보를 저장 한 다음 시뮬레이션을 다시 시작하는 데이 정보를로드하는 것입니다. 시뮬레이션을 다시 시작하기 전에 입력을 변경하려고하지만 모델이 저장 한 정보에서 입력 값을로드하는 것으로 보이며 새 입력 값을 사용하지 않습니다.

저는이 문제를 아주 오랫동안 고집했습니다. 누군가 제발 도와 줄 수 있습니까?

대단히 감사합니다.

답변

1

이것은 현재 M 파일에서 가능하지 않습니다. 주어진 시간에 외부에서 입력을 동적으로 변경하려면 S-Function이 필요합니다. Mathworks는 판매하는 다른 도구 상자의 기능 중 하나를 무효화하기 때문에이 기능을 지원하기를 원하지 않기 때문에이 솔루션조차도 쉽지 않습니다. 시간이 지나면, 나는 그들이이 일을 허락 할 것이라고 믿지만 오늘은 존재하지 않는다. 또한 동적 입력 블록을 사용하여지도, 신호 작성기 등과 같이 입력 값을 변경하는 것이 좋습니다.

+0

내 대답을 참조하십시오. 불가능한 것은 사실이 아닙니다. 시뮬링크 시뮬레이션의 진행 상황을 알려주는 waitbar를 보여주기 위해 얼마 전에 이것을 구현했습니다. – mmumboss

+0

@ Johann3s, Matlab 세션이 0.6s 시뮬레이션 시간을 만났을 때 발견 할 수있는 사실은 질문에 표시된 시뮬레이션 중에 모델에 사용 된 변수의 값을 변경하는 것이 더 어렵고, 현재 M- 스크립트 가능. – macduff

+0

나는 시뮬레이션하는 동안 m- 파일에서 명령을 내림으로써 같은 방식으로 가능하다고 생각한다. 분명히 인라인 매개 변수를 해제해야하지만 왜이 작업을 수행하지 않는지 알 수 없습니까? – mmumboss

1

당신과 함께 실행 시뮬레이션의 현재 시간을 얻을 수 있습니다 :

get_param('simulink_model_name', 'SimulationTime'); 

그래서

timer(...) 

를 사용하여 시뮬레이션 동안 M-파일에서이 값을 확인하여 예를 들어 당신이 때를 감지 할 수 있습니다 시뮬레이션은 0.6 초입니다.

0

유사한 목표를 달성하기 위해 시뮬 링크와 m 스크립트의 조합을 사용했습니다.

모델에 'assert'블록을 하나 추가하십시오. 그것을 두 번 클릭하고 '단정이 실패하면 시뮬레이션 중지'의 선택을 취소하십시오. (bdroot 'SimulationCommand', '일시 정지')

  1. set_param, 다음 '주장이 실패 시뮬레이션 콜백'입력란에 세 개의 명령을 추가
  2. run ('myscript.m'); 스크립트 이름을 삽입하십시오.
  3. set_param (bdroot, 'SimulationCommand', 'continue');

이제이 블록의 inport를 'not equal to'관계 연산자에 연결하십시오. 관계 연산자의 첫 번째 inport를 시계에 연결합니다 (pls는 아날로그 시계의 데시 메이션을 설정하거나 샘플 시간 [일반적으로 디지털 시계의 경우 상속 된 경우 -1]). 두 번째 inport는 값이 0.6 인 상수 블록에 연결됩니다.

모델을 시뮬레이션 할 때 시뮬레이션이 0.6 초에 일시 중지되고 m- 파일을 실행하여 입력 매개 변수를 변경하고 조정할 수 있습니다. 시뮬레이션과 함께.

어서션 블록은 입력 신호가 0이되면 호출됩니다. 0 일 때.6 초이면 관계 연산자의 출력은 0이됩니다.

작동하면 알려주세요.

관련 문제