2017-05-16 1 views
1

은이 코드를 사용하는 tryed. 하지만 내 코드는 작동하지 않습니다. when 문에 대해 modelica에서 복잡한 이벤트를 생성하려면 어떻게해야합니까?when 문에 대해 modelica에서 복잡한 이벤트를 생성하려면 어떻게해야합니까?</p> <pre><code>Real x,y; Boolean trigger(start = true) when x < y and trigger then trigger = false; end when; </code></pre> <p>나는 "때"한 번만에 대한 이벤트를 생성하려면 :

+1

"하지만 내 코드가 작동하지 않습니다"는별로 도움이되지 않습니다 - 어떻게 될 것으로 예상됩니까? 또한, 완전한 예제를 게시하십시오. – Christoph

+0

번역 오류가 발생하며 잘못된 코드라고 생각합니다. 코드를 사용할 때 :'x Tyomich

+0

그럼, 정확한 오류와 정확한 오류 코드를 게시하십시오. – Christoph

답변

2
Dymola에서

하면 다음 오류 메시지 얻을 :

계산적 인과 분석 변수는 식 해결되어야 를 실행할 필요 X < Y 다음 = 거짓 트리거 트리거; 끝낼 때; 그러나 when 조건은 알 수없는 값에 따라 달라집니다.

when 조건에서 참조 앞에 'pre'를 넣어 루프를자를 수 있습니다. 당신이 매우 간단합니다 (그리고 Dymola에서 시뮬레이션)을 참조로

Real x,y; 
Boolean trigger(start = true) ; 
equation 
when x < y and pre(trigger) then 
    trigger = false; 
end when; 

,하지만 난 OpenModelica에서 그것을 확인하지 않은 :

따라서 해결책은 될 것이다.

+0

정말 고마워요, 그것도 OM에서 시뮬레이션입니다.'pre()'없이 '알고리즘'을 사용하여 시뮬레이션 할 수 있습니다. '부울 트리거 (시작 = true, 고정 = true); 알고리즘 시간이 5 이상이고 트리거 할 때 트리거 : = 거짓; 끝낼 때; – Tyomich

1

처음 나타나는 오류 메시지는 Internal error BackendDAETransform.analyseStrongComponentBlock failed (Sorry - Support for Discrete Equation Systems is not yet implemented)입니다. 이것은 https://trac.openmodelica.org/OpenModelica/ticket/1232 인 것 같습니다. 그리고 그것은 when 문 내에서 조건 변수의 일부를 재정 의하여 발생했다고 생각합니다.

reinit으로 해결할 수 있습니다. Bouncing ball examplethe reference을 참조하십시오. 상태 변수에 따라 행동해야하기 때문에 나는 der(trigger)을 거기에 넣습니다.

model test_when 
    Real trigger(start = 1.0, fixed = true); 
equation 
    der(trigger) = 0; 
    when trigger > 0.5 and time > 5 then 
    reinit(trigger, 0); 
    end when; 
    annotation(
    experiment(StartTime = 0, StopTime = 10, Tolerance = 1e-06, Interval = 0.02)); 
end test_when; 

아마이 방법을 사용하는 것이 더 좋습니다. 다른 사람이 이것에 대한 정보를 얻었습니까?

컴파일 로그 (통계 - 이벤트)를 확인하여 하나의 이벤트 만 실행되었음을 확인할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 그것이 작동하는 것을보고 그것을 구현 한 문제를 발견하게 될 것입니다. – Tyomich

관련 문제