How to create a time varying constant?

조회 수: 34 (최근 30일)
Monika Jaskolka
Monika Jaskolka 2021년 6월 10일
편집: Monika Jaskolka 2021년 6월 24일
I have data that I logged from my Simulink model using ToWorkspace blocks. This data is in the usual [Time, Data] format and a sample is attached. I have migrated this data into the data dictionary for the model, and now want to use it as input using a Constant block. However, I am getting an error:
Error in port widths or dimensions. Output port 1 of 'Model/Convert' is a one dimensional vector with 334 elements
It seems like it is reading the entire vector at once, instead of one element per time step. Is it possible to have a constant store time varing data? Note, I do not want to read this data into the model using FromWorkspace blocks because these blocks are not supported when using Simulink Design Verifier.

채택된 답변

Walter Roberson
Walter Roberson 2021년 6월 11일
Is it possible to have a constant store time varing data? Note, I do not want to read this data into the model using FromWorkspace blocks because these blocks are not supported when using Simulink Design Verifier.
NO. Simulink is permitted to reason about the effect that constants have on the output, under the assumption that they are indeed constant. It is permitted to uses them to reason about whether indexes will be in range, about whether derivatives will be singular, reason about whether an integration will overflow, reason about whether a variant system will be selected, and so on. If the constant could change with time, then that would not be possible.
For example, V1+1/R0 is fine when R0 is a constant that can be tested as not being close to realmin(), but if the "constant" were varying, then it would have no idea whether R0 is ever 0 or not.
If you have fixed input "constants" then you can in theory break your model up piecewise in time, verify, and glue the pieces together. Though using a lookup table like Markus suggests sounds reasonable if you can get Simulink Design Verifier to support those.
  댓글 수: 1
Monika Jaskolka
Monika Jaskolka 2021년 6월 24일
편집: Monika Jaskolka 2021년 6월 24일
You are right. I was thinking that by providing SDV with pre-recorded inputs it would allow SDV to perform range determination and assist with narrowing that state space of the analysis. However, this can be achieved with inport blocks that are adequately configured to have Min/Max information, as well as using SDV parameter configuration.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Markus
Markus 2021년 6월 11일
You could use a counter that counts up and use data as a 2D Lookup-Table.
You can do this with a counter or with the timestamps and attach the clock if you use a fixed timestep.
Either way you would use Data.Data as Table data and either Data.Time as Breakpoints or [1:length(Data)] or length(Data.Data) respectively.
Is this going in the direction you want?

카테고리

Help CenterFile Exchange에서 Simulink Functions에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by